Cod sursa(job #433061)

Utilizator raduiris94Alexa Radu raduiris94 Data 3 aprilie 2010 12:09:25
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream> 
#define MAX 15001 
using namespace std; 
int m, n; 
int a[MAX]; 
void add(int x, int v); 
void pay(int x, int v); 
int sum(int x); 
int bit(int x); 
int main() 
{    
	int i, x, v, v1, v2, s1 = 0, s2 = 0, c;  
	ifstream fin("datorii.in");  
	ofstream fout("datorii.out");   
	fin >> n >> m;  
	for (i = 1; i <= n; i++)     
	a[i] = 0;    
	for (i = 1; i <= n; i++)        
	{       
		fin >> c;   
		add(i, c);   
	}       
	for (i = 1; i <= m; i++)    
	{    
		fin >> c; 
		if (c == 0)       
		{            
			fin >> x >> v;       
			pay(x, v);           
		}        
		if (c == 1)        
		{      
			fin >> v1 >> v2;
			s1 = sum(v2);
		if (v1 != 1)           
		{          
			s2 = sum(v1-1);
			fout << s1-s2 << "\n";
		}            
		else         
		{ 
			fout << s1 << "\n";     
		}                
	} 
} 
	fin.close();
	fout.close();
	return 0;
} 
 
void add(int x, int v) 
{   
	int i;
	for (i = x; i <= n; i += bit(i))    
	a[i] += v;    
} 
void pay(int x, int v) 
{ 
	int i;  
	for (i = x; i <= n; i += bit(i))         
	a[i] -= v; 
} 
int sum(int x) 
{   
	int s = 0, i;    
	for (i = x; i > 0; i -= bit(i))             
	s += a[i];     
	return s; 
} 

 
int bit(int x) 
{     
	return (x&(x-1))^x;    
}