Cod sursa(job #2196442)

Utilizator waren4Marius Radu waren4 Data 19 aprilie 2018 11:52:00
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("datorii.in"); ofstream g("datorii.out");

int Arb[64003];
int n,m,ans;

void update(int nod, int st, int dr, int poz, int val) {
    if(st == dr) {
        Arb[nod] = Arb[nod] + val;
        return;
    }
    int mij = (st + dr) / 2;
    if(poz <= mij) {
        update(nod*2,st,mij,poz,val);
    }
    else {
        update(nod*2+1,mij+1,dr,poz,val);
    }
    Arb[nod] = Arb[nod*2] + Arb[nod*2+1];
}

void query(int nod, int st, int dr, int x, int y) {
    if (st >= x && dr <= y) {
        ans += Arb[nod];
        return;
    }
    int mij = (st + dr) / 2;
    if(x <= mij) {
        query(nod*2,st,mij,x,y);
    }
    if(y > mij) {
        query(nod*2+1,mij+1,dr,x,y);
    }
}

int main() {
    int i,x,y;
    f>>n>>m;
    for(i = 1; i <= n; ++i) {
        f>>x;
        update(1,1,n,i,x);
    }
    bool c;
    for(i = 1; i <= m; ++i) {
        f>>c>>x>>y;
        if(c == 0) {
            y = -y;
            update(1,1,n,x,y);
        }
        if(c == 1) {
            ans = 0;
            query(1,1,n,x,y);
            g<<ans<<'\n';
        }
    }
    return 0;
}