Cod sursa(job #352019)

Utilizator danni_1107Sengher Daniel danni_1107 Data 30 septembrie 2009 08:49:49
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
01.#include<stdio.h> 
02.int n,m,i,j,k,U[16000],D[16000],s[16000],ss,si; 
03.void read(),solve(); 
04.int main() 
05.{ 
06.    
read(); 
07.    
solve(); 
08.    
return 0; 
09.} 
10.void read() 
11.{ 
12.    
freopen("datorii.in","r",stdin); 
13.    
freopen("datorii.out","w",stdout); 
14.    
scanf("%d%d",&n,&m); 
15.} 
16.void solve() 
17.{ 
18.    
for(i=1;i<=n;i<<=1) 
19.    
{ 
20.        
j=i<<1; 
21.        
for(k=i;k<=n;k=k+j) 
22.        
{ 
23.            
U[k]=k+i<=n?k+i:0; 
24.            
D[k]=k-i; 
25.        
} 
26.    
} 
27.    
for(i=1;i<=n;i++) 
28.    
{ 
29.        
scanf("%d",&si); 
30.        
for(j=i;j;j=U[j])s[j]+=si; 
31.    
} 
32.    
for(;m;m--) 
33.    
{ 
34.        
scanf("%d%d%d",&i,&j,&k); 
35.        
if(i) 
36.        
{ 
37.            
si=ss=0;j--; 
38.            
for(;j;j=D[j])si+=s[j]; 
39.            
for(;k;k=D[k])ss+=s[k]; 
40.            
printf("%d\n",ss-si); 
41.            
continue; 
42.        
} 
43.        
for(;j;j=U[j]) 
44.            
s[j]-=k; 
45.    
} 
46.}