Cod sursa(job #2786487)

Utilizator TghicaGhica Tudor Tghica Data 21 octombrie 2021 08:38:57
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>

using namespace std;

int aib[15001], n;

void update( int poz, int val ) {
    while(poz<=n) {
        aib[poz] += val;
        poz = poz + (poz&(-poz));
    }
    return;
}

int findSum( int dr ) {
    int s = 0;
    while( dr ) {
        s += aib[dr];
        dr -=(dr&(-dr));
    }
    return s;
}

int query( int st, int dr ) {
    return findSum( dr ) - findSum( st - 1 );
}

int main() {
    ifstream cin("datorii.in");
    ofstream cout("datorii.out");
    int m, i, p, a, b;
    cin>>n>>m;
    for( i = 1; i <= n; i++ ) {
        cin>>a;
        update( i, a );
    }
    for( i = 1; i <= m; i++ ) {
        cin>>p;
        cin>>a>>b;
        if( p == 1 ) {
            cout<<query( a, b )<<"\n";
        } else {
            update( a, -b );
        }
    }
    return 0;
}