Cod sursa(job #581173)

Utilizator nautilusCohal Alexandru nautilus Data 13 aprilie 2011 20:45:00
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<fstream>
#define dmax 15010
using namespace std;

int n,m;
int s[dmax];


int putere2(int k)
{
 return ((k^(k-1))&k);
}


void update(int poz, int val, int tip)
{
 int i;
	
 for (i=poz; i<=n; i += putere2(i))
	 s[i] += tip * val;
}


int query(int poz)
{
 int i,suma=0;
	
 for (i=poz; i>=1; i -= putere2(i))
	 suma += s[i];
	
 return suma;
}


void citire()
{
 int i,op,x,y;
	
 ifstream fin("datorii.in");
 ofstream fout("datorii.out");
 
 fin>>n>>m;
 
 for (i=1; i<=n; i++)
	 {
	  fin>>x;
	  update(i, x, 1); /*adaugare*/
	 }
 
 for (i=1; i<=m; i++)
	 {
	  fin>>op>>x>>y;
	  
	  if (op == 0)
		  update(x, y, -1); /*scadere*/ else
		  fout<<query(y) - query(x-1)<<'\n';
	 }
	
 fin.close();
 fout.close();
}


int main()
{
	
 citire();
	
 return 0;
}