Cod sursa(job #1009698)

Utilizator lupuflaviu9lupuflaviu lupuflaviu9 Data 13 octombrie 2013 17:53:35
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 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;
}