Cod sursa(job #2852887)

Utilizator Iordache_CezarIordache Cezar Iordache_Cezar Data 19 februarie 2022 17:44:37
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
#define lsb(x) ((x ^ (x - 1)) + 1) / 2
#define NMAX 15004

using namespace std;
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");

int n, m;
int aib[NMAX];

void citire();
void update(int poz, int val);
int suma(int poz);

int main()
{
    citire();
    return 0;
}

void citire()
{
    int cerinta, a, b;
    fin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        fin >> a;
        update(i, -a);
    }
    for (int i = 1; i <= m; i++)
    {
        fin >> cerinta >> a >> b;
        if (cerinta == 0)
            update(a, b);
        else
            fout << suma(b) - suma(a-1) << '\n';
    }
}

int suma(int poz)
{
    int s = 0;
    for (int i = poz; i; i -= lsb(i))
        s += aib[i];
    return s;
}

void update(int poz, int val)
{
    for (int i = poz; i <= n; i += lsb(i))
        aib[i] -= val;
}

int caut_binar(int val)
{
    int st = 0, dr = n + 1, mij;
    while (dr - st > 1)
    {
        mij = (st + dr) / 2;
        if (val < suma(mij))
            dr = mij;
        else if (val > suma(mij))
            st = mij;
        else
            return mij;
    }

    return -1;
}