Cod sursa(job #767720)

Utilizator lucian666Vasilut Lucian lucian666 Data 14 iulie 2012 14:56:52
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb


#include<fstream>
#define NN 15005

using namespace std;
ofstream out("datorii.out");

int arb[NN],n,m;

void read();
void adauga(int indice,int element);
int raspuns(int element);

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

void read()
{
	ifstream in("datorii.in");
	in>>n>>m;
	for(int x,i=1;i<=n;i++)
	{
		in>>x;
		adauga(i,x);
	}
	for(int tip, i=1;i<=m;i++)
	{
		in>>tip;
		if(tip==0)
		{
			int x,t;
			in>>t>>x;
			adauga(t,-x);
		}
		else
		{
			int x,y;
			in>>x>>y;
			out<<raspuns(y)-raspuns(x-1)<<'\n';
		}
	}
}


void adauga(int indice,int element)
{
	int pozbit=0;
	while(indice <= n)
	{
		arb[indice]+=element;
		while(!(indice & (1<<pozbit) ) )
			pozbit++;
		indice += (1<<pozbit );
		pozbit+=1;
	}
	
}

int raspuns (int indice)
{
	int suma=0,pozbit=0;
	while(indice > 0)
	{
		suma+=arb[indice];
		while(!(indice & (1<<pozbit ) ) )
			pozbit++;
		indice-=1<<pozbit;
		pozbit+=1;
	}
	return suma;
}