Cod sursa(job #705743)

Utilizator ion824Ion Ureche ion824 Data 4 martie 2012 21:08:43
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<cstdio>
#define nmax 15005
int arb[4*nmax+50],val,start,finish,pos,x;
     
void update(int nod,int left,int right){
     if(left == right){
             arb[nod]+=x;
             return ;
             }
     int div=(left+right)/2;
     if(pos<=div)update(2*nod,left,div);
            else update(2*nod+1,div+1,right);
     arb[nod]+=x;
     }     

void query(int nod,int left,int right){
     if(start<=left && right<=finish){
                    val+=arb[nod];
                    return ;
                    }
      int div=(left+right)/2;
      if(start<=div)query(2*nod,left,div); 
      if(div<finish)query(2*nod+1,div+1,right);        
     }

int main(void){
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    int n,m,i;
    scanf("%d %d\n",&n,&m);
    for(i=1;i<=n;++i){ 
                       scanf("%d ",&x);
                       pos=i;                        
                       update(1,1,n);
                       }
    while(m--){
               scanf("%d %d %d\n",&x,&start,&finish);       
               if(x){
                     val=0;
                     query(1,1,n);
                     printf("%d\n",val);
                     } 
                     else{      
                      pos=start; x=-finish;
                      update(1,1,n);
                      }                
     }
 return 0;   
}