Cod sursa(job #989384)

Utilizator meehighStancu Mihai meehigh Data 25 august 2013 16:08:14
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
 
#define NMAX 15001
 
int tree[NMAX];
 
void update(int i, int n, int val){
    while (i <= n){
        tree[i] += val;
        i += -i & i;
    }
}
 
long read(int i){
    long sum = 0;
    while (i > 0){
        sum += tree[i];
        i -= -i & i;
    }
    return sum;
}
 
int main(){
 
    FILE *fin, *fout;
	fin = fopen("datorii.in", "rt");
	fout = fopen("datorii.out", "wt");
 
    int n,m,a;
	fscanf(fin,"%d %d", &n, &m);
 
    for (int i=1; i<=n; i++){
        fscanf(fin, "%d", &a);
        update(i,n,a);
    }
         
    int o,t,v;
 
    for (int i=0; i<m; i++){
        fscanf(fin, "%d %d %d", &o, &t, &v);
 
        if (o==0){
            update(t,n,-v);
        }
        else {
			fprintf(fout, "%ld\n", read(v) - read(t-1));
        }
    }
 
    fclose(fin);
	fclose(fout);
 
    return 0;
}