Cod sursa(job #130249)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 31 ianuarie 2008 18:01:19
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
 #include<stdio.h>     
 #define N 15001     
 int m,n,a[N];     
 int zero(int x){     
     int r=1;     
     while(!(x&1)){     
         x>>=1;     
         r<<=1;     
     }     
     return r;     
 }     
 void adauga(int i,int x){     
     while(i<=n){     
         a[i]+=x;     
         i+=zero(i);     
     }     
 }     
 int suma(int p){     
     int s=0;     
     while(p){     
         s+=a[p];     
         p-=zero(p);     
     }     
     return s;     
 }     
 void calcul(){     
     int i,x,tip,p,q,zi;     
     scanf("%d%d",&n,&m);     
     for(i=1;i<=n;++i){     
         scanf("%d",&x);     
         adauga(i,x);     
     }     
     /*   
     for(i=1;i<=n;++i)   
         printf("%d ",a[i]);   
     */    
     for(i=1;i<=m;++i){     
         scanf("%d",&tip);     
         if(tip){     
             scanf("%d%d",&p,&q);     
             printf("%d\n",suma(q)-suma(p-1));     
         }     
         else{     
             scanf("%d%d",&zi,&x);     
             adauga(zi,-x);     
         }     
     }     
 }     
 int main(){     
     freopen("datorii.in","r",stdin);     
     freopen("datorii.out","w",stdout);     
     calcul();     
     fclose(stdin);     
     fclose(stdout);     
     return 0;     
}