Cod sursa(job #309105)

Utilizator flavius_bboian flavius flavius_b Data 29 aprilie 2009 18:29:24
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>      
  
long b[100000],aib[100000],i,j,x,y,n,st,fn,s,s1,s2,m,mij,c;   
int main()   
  
{   
freopen("datorii.in","r",stdin);freopen("datorii.out","w",stdout);   
 scanf("%ld%ld",&n,&m);   
 for(i=1;i<=n;i++)   
  {j=i;b[i]=1;while(j%2==0){b[i]*=2;j/=2;}}   
 for(i=1;i<=n;i++)   
  {scanf("%ld",&x);   
   for(j=i;j<=n;j+=b[j])aib[j]+=x;   
  }   
 for(;m;m--)   
  {scanf("%ld",&c);      
   if(c==0){scanf("%ld%ld",&x,&y);for(i=x;i<=n;i+=b[i])aib[i]-=y;}      
    else     
     if(c==1){scanf("%ld%ld",&x,&y);s1=s2=0;      
          for(i=x-1;i>=1;i-=b[i])s1+=aib[i];      
          for(i=y;i>=1;i-=b[i])s2+=aib[i];      
          s2=s2-s1;printf("%ld\n",s2);      
         }      
  }      
 fclose(stdin);fclose(stdout);   
 return 0;      
}