Cod sursa(job #994782)

Utilizator Corneliu10Dumitru Corneliu Corneliu10 Data 6 septembrie 2013 12:32:28
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 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;
}