Cod sursa(job #352020)

Utilizator danni_1107Sengher Daniel danni_1107 Data 30 septembrie 2009 08:53:09
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<stdio.h> 
int n,m,i,j,k,U[16000],D[16000],s[16000],ss,si; 
void read(),solve(); 
int main() 
{   
read();   
solve(); 
return 0; 
} 
void read() 
{   
freopen("datorii.in","r",stdin); 
freopen("datorii.out","w",stdout);   
scanf("%d%d",&n,&m); 
} 
void solve() 
{ 
for(i=1;i<=n;i<<=1)   
{ 
j=i<<1; 
for(k=i;k<=n;k=k+j)       
{ 
U[k]=k+i<=n?k+i:0;   
D[k]=k-i;       
}   
}   
for(i=1;i<=n;i++)     
{         
scanf("%d",&si);         
for(j=i;j;j=U[j])s[j]+=si;     
}     
for(;m;m--)     
{         
scanf("%d%d%d",&i,&j,&k);         
if(i)         
{             
si=ss=0;j--;             
for(;j;j=D[j])si+=s[j];             
for(;k;k=D[k])ss+=s[k];             
printf("%d\n",ss-si);             
continue;         
}         
for(;j;j=U[j])             
s[j]-=k;    
} }