Cod sursa(job #920711)

Utilizator FayedStratulat Alexandru Fayed Data 20 martie 2013 16:36:50
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <cstdio>
#define NMAX 15001

int Arb[NMAX],Sum,n,m;

inline int Query(int ind){

    int S=0,C=0;
        while(ind>0){
            S+=Arb[ind];
            while(!(ind &(1<<C)))
                ++C;
            ind-=(1<<C);
            ++C;
        }
return S;
}

inline void Update(int X,int ind){

    int C=0;
        while(ind<=n){
            Arb[ind]+=X;
            while(!(ind & (1<<C)))
                ++C;
                ind+=(1<<C);
                ++C;
        }
}

inline void solve(){

    int cod,X,Y;
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(register int i=1;i<=n;++i){
       scanf("%d",&X);
        Update(X,i);
    }

    while(m){
        scanf("%d",&cod);
            if(!cod){
                scanf("%d%d",&X,&Y);
                Update(-Y,X);
            }
            else{
                scanf("%d%d",&X,&Y);
                 printf("%d\n",Query(Y) - Query(X-1));
            }
    --m;
    }
}

int main(){

    solve();
return 0;
}