Cod sursa(job #1760417)

Utilizator blatulInstitutul de Arta Gastronomica blatul Data 20 septembrie 2016 19:36:42
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
#include <algorithm>
using namespace std;

#define LSB(x) ((x) & -(x))
#define Nmax 100002

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

int N, AIB[Nmax];

inline void AddVal( int pos, int val ){

    for( int i = pos; i <= N; i += LSB(i) )
        AIB[i] += val;
}

inline int Sum( int pos ){

    int res = 0;

    for( int i = pos; i > 0; i -= LSB(i) )
        res += AIB[i];

    return res;
}

inline int Query( int x, int y ){
    return Sum(y) - Sum(x-1);
}

int main(){

    int M, t, x, y;

    fin >> N >> M;

    for( int i = 1; i <= N; ++i ){
        fin >> x;
        AddVal( i, x );
    }

    while( M-- ){
        fin >> t >> x >> y;

        if( t == 0 )
            AddVal( x, -y );
        else
            fout << Query( x, y ) << '\n';
    }

    return 0;
}