Cod sursa(job #2400748)

Utilizator Teo_1101Mititelu Teodor Teo_1101 Data 9 aprilie 2019 08:43:48
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int NMAX = 15001;

int tree[4 * NMAX];
int a[NMAX];

int N, Q;

int Query(int nod, int lf, int rg, int L, int R)
{
    if(L <= lf && rg <= R) return tree[nod];

    int ans1, ans2;
    ans1 = ans2 = 0;

    int mid = (lf + rg) / 2;

    if(L <= mid) ans1 = Query(nod * 2, lf, mid, L, R);
    if(R > mid) ans2 = Query(nod * 2 + 1, mid + 1, rg, L, R);

    return ans1 + ans2;

}

void Update(int nod, int lf,int rg, int pos, int val)
{
    if(lf == rg)
    {
        tree[nod] += val;
        return ;
    }

    int mid = (lf + rg) / 2;

    if( pos <= mid )Update(nod * 2, lf, mid, pos, val);
    else Update(nod * 2 + 1, mid + 1, rg, pos, val);

    tree[nod] = tree[nod * 2] + tree[nod * 2 + 1];
}
void Do()
{
   fin >> N >> Q;

    for(int i = 1; i <= N; ++i)
    {
        fin >> a[i];
        Update(1, 1, N, i, a[i]);
    }

    int task, x, y;

    for(int q = 1; q <= Q; ++q)
    {
        fin >> task >> x >> y;
        if( task == 0 )Update(1, 1, N, x, -y);
        else fout << Query(1, 1, N, x, y)  << '\n';
    }
}
int main()
{
    Do();
    return 0;
}