Cod sursa(job #2260027)

Utilizator pasoi_stefanPasoi Stefan pasoi_stefan Data 14 octombrie 2018 11:58:28
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<cstdio>
using namespace std;
FILE *in=fopen("datorii.in","r");
FILE *out=fopen("datorii.out","w");
int n,m,x,c,a,b,tree[15005];
void update1(int i,int x)
{
    while(i<=n){
        tree[i]+=x;
        i+=(i & -i);
    }
}
void update2(int i,int x)
{
    while(i<=n){
        tree[i]-=x;
        i+=(i & -i);
    }
}
int query(int i){
    int s=0;
    while(i>0){
        s+=tree[i];
        i-=(i & -i);
    }
    return s;
}
int main(){
    fscanf(in,"%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        fscanf(in,"%d",&x);
        update1(i,x);
    }
    while(m--){
        fscanf(in,"%d",&c);
        if(c==0){
            fscanf(in,"%d%d",&a,&b);
            update2(a,b);
        }
        else{
            fscanf(in,"%d%d",&a,&b);
            fprintf(out,"%d\n",query(b)-query(a-1));
        }
    }
}