Cod sursa(job #2330245)

Utilizator LivcristiTerebes Liviu Livcristi Data 28 ianuarie 2019 09:45:41
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>
#define NUM 15005
int v[4 * NUM];
int n, m, op, a, b;
using namespace std;
void adaug(int nod, int val, int poz, int st, int dr)
{
    if(st == dr)
    {
        v[nod] += val;
        return;
    }
    int mij = st + (dr - st) / 2;

    if(poz <= mij)
        adaug(2 * nod, val, poz, st, mij);
    else
        adaug(2 * nod + 1, val, poz, mij + 1, dr);
    v[nod] += val;
}
int q(int nod, int a, int b, int st, int dr)
{
    if(a <= st && dr <= b)
        return v[nod];

    int r1 = 0, r2 = 0, mij;
    mij = st + (dr - st) / 2;
    if(!(b<st||mij<a))
        r1 = q(2 * nod, a, b, st, mij);
    if(a <= dr && mij + 1 <= b)
        r2 = q(2 * nod + 1, a, b, mij + 1, dr);
    return r1 + r2;
}
int main()
{
    ifstream f("datorii.in");
    ofstream g("datorii.out");
    f >> n >> m;
    for(int i = 1; i <= n; ++i)
    {
        f >> a;
        adaug(1, a, i, 1, n);
    }
    for(int i = 1; i <= m; ++i)
    {
        f >> op >> a >> b;
        if(!op)
            adaug(1, -b, a, 1, n);
        else
            g << q(1, a, b, 1, n) << "\n";
    }

    f.close();
    g.close();
}