Cod sursa(job #129597)

Utilizator ThomasFMI Suditu Thomas Thomas Data 29 ianuarie 2008 19:25:57
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
   #include <stdio.h>  
   #define Nmax 15002  
     
   long n,m,i,ind,op,p,q,c[Nmax],a,s,poz;  
     
   int main(){  
       freopen("datorii.in","r",stdin);  
       freopen("datorii.out","w",stdout);  
        
       scanf("%ld %ld",&n,&m);  
       for (i=1;i<=n;i++){  
           scanf("%ld",&a);  
           ind=i;  
           poz=0;  
           while (ind<=n){  
                 c[ind]+=a;  
                 while((long)(ind&(1<<poz))==0)poz++;  
                 ind+=(1<<poz);  
                 poz++;  
           }  
       }  
         
       for (i=1;i<=m;i++){  
           scanf("%ld %ld %ld",&op,&p,&q);  
           if (op==0){  
              ind=p;  
              poz=0;  
              while (ind<=n){  
                    c[ind]-=q;  
                    while((long)(ind&(1<<poz))==0)poz++;  
                    ind+=(1<<poz);  
                    poz++;  
              }  
           }  
           else{  
                s=0;  
                ind=q;  
                poz=0;  
                while (ind){  
                      s+=c[ind];  
                      while((long)(ind&(1<<poz))==0)poz++;  
                      ind-=(1<<poz);  
                      poz++;  
                }  
                ind=p-1;               
                poz=0;  
                while (ind){  
                      s-=c[ind];  
                      while((long)(ind&(1<<poz))==0)poz++;  
                      ind-=(1<<poz);  
                      poz++;  
                }  
                printf("%ld\n",s);  
           }  
       }  
         
       return 0;  
   }