Cod sursa(job #1181116)

Utilizator mihail.jianuJianu Mihail mihail.jianu Data 1 mai 2014 20:43:56
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<cstdio>
const int N=15000;
int tree[N*2+1];
int n,t;
FILE*in=fopen("datorii.in","r");
FILE*out=fopen("datorii.out","w");
void updateTree(int p,int val){
    while(p<=n){
        tree[p]-=val;
        p+=p&-p;
    }
}
void scan(){
    int i,no;
    fscanf(in,"%d%d",&n,&t);
    for(i=1;i<=n;i++){
        fscanf(in,"%d",&no);
        updateTree(i,-no);
    }
}
int sum(int p){
    int s=0;
    while(p>0){
        s+=tree[p];
        p-=p&-p;
    }
    return s;
}
int main(){
    int type,p,v,x,y;
    scan();
    while(t!=0){
        fscanf(in,"%d",&type);
        if(type==0){
            fscanf(in,"%d%d",&p,&v);
            updateTree(p,v);
        }
        else{
            fscanf(in,"%d%d",&x,&y);
            fprintf(out,"%d\n",sum(y)-sum(x-1));
        }
        t--;
    }
    return 0;
}