Cod sursa(job #2638874)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 30 iulie 2020 13:13:26
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <fstream>
#define zeros( x ) ( (x ^ (x - 1)) & x )
using namespace std;
int aib[ 15005 ];
int n;

void pune( int x, int cat ){
    for( int i = x; i <= n; i += zeros( i ) )
        aib[ i ] += cat;
}

int com( int x ){
    int rez = 0;
    for( int i = x; i > 0; i -= zeros( i ) )
        rez += aib[ i ];
    return rez;
}

int main()
{
    int m, i, nr, x, y, op;
    ifstream cin( "datorii.in" );
    cin >> n >> m;
    for( i = 1; i <= n; i++ ){
        cin >> nr;
        pune( i, nr );
    }
    ofstream cout( "datorii.out" );
    while( m-- ){
        cin >> op >> x >> y;
        if( op == 0 )
            pune( x, -y );
        else cout << com( y ) - com( x - 1 ) << '\n';
    }
    cin.close();
    cout.close();
    return 0;
}