Cod sursa(job #480347)

Utilizator alin1303Bulai Alin alin1303 Data 27 august 2010 15:35:37
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
01.#include <cstdio> 
02.#define lsb(x)  ((x ^ (x - 1)) & x) 
03.int n, m, a[15001]; 
04.long long c[15001]; 
05.FILE *in, *out; 
06.void read() 
07.{ 
08.    
int i; 
09.    
in = fopen("datorii.in", "r"); 
10.    
fscanf(in, "%d%d", &n, &m); 
11.    
for(i=1; i<=n; ++i) 
12.        
fscanf(in, "%d", a+i); 
13.} 
14. 
 
15.void solve() 
16.{ 
17.    
int code, i, j; 
18.    
out=fopen("datorii.out", "w"); 
19.    
for(i=1; i<=n; ++i) 
20.    
{ 
21.        
for(j=i-(lsb(i))+1; j<=i; j++) 
22.            
if(j>=0) 
23.                
c[i]+=a[j]; 
24.    
} 
25. 
 
26.    
for(i=0; i<m; ++i) 
27.    
{ 
28.        
int c1, c2; 
29.        
fscanf(in, "%d%d%d", &code, &c1, &c2); 
30.        
if(code==0) 
31.        
{ 
32.            
while(c1<=n && c1>=0) 
33.            
{ 
34.                
c[c1]-=c2; 
35.                
c1+=(lsb(c1)); 
36.            
} 
37.        
} 
38.        
if(code==1) 
39.        
{ 
40.            
long long s1=0, s2=0; 
41.            
c1--; 
42.            
while(c1>=1 && c1<=n) 
43.            
{ 
44.                
s1+=c[c1]; 
45.                
c1-=(lsb(c1)); 
46.            
} 
47.            
while(c2>=1 && c2<=n) 
48.            
{ 
49.                
s2+=c[c2]; 
50.                
c2-=(lsb(c2)); 
51.            
} 
52.            
fprintf(out, "%lld\n", s2-s1); 
53.        
} 
54. 
 
55.    
} 
56.} 
57. 
 
58. 
 
59.int main () 
60.{ 
61.    
read(); 
62.    
solve(); 
63.    
return 0; 
64.}