Cod sursa(job #2786521)

Utilizator AlexNicuNicu Alexandru AlexNicu Data 21 octombrie 2021 09:29:49
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>

using namespace std;

ifstream cin ("datorii.in" );
ofstream cout ("datorii.out" );

#define NMAX 15000

int aib[NMAX + 1], n;

int suma( int p ) {
    int s = 0;
    while ( p != 0 ) {
        int p2 = ( p & (-p) );
        s += aib[p];
        p -= p2;
    }
    return s;
}
void actualizare( int p, int val ) {
    while ( p <= n ) {
        aib[p] += val;
        int p2 = ( p & (-p) );
        p += p2;
    }
}

int caut( int val ) {
    int p = 0, pas = 1 << 16;
    while ( pas != 0 ) {
        if ( p + pas <= n && suma(p + pas) < val ) {
            p += pas;
        }
        pas /= 2;
    }
    if ( p < n && suma(p + 1) == val ) return p + 1;
    return -1;
}

int main() {
    int m, i, x, p, op, a, b;
    cin >> n >> m;
    for ( i = 1; i <= n; i++ ) {
        cin >> x;
        actualizare( i, x );
    }
    for ( i = 1; i <= m; i++ ) {
        cin >> op >> a >> b;
        if ( op == 0 ) {
            actualizare( a, -b );
        }
        else {
            cout << suma(b) - suma(a - 1) << "\n";
        }
    }
    return 0;
}