Cod sursa(job #558864)

Utilizator SadmannCornigeanu Calin Sadmann Data 17 martie 2011 14:45:03
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include<fstream>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int tip,poz,val,C[15001],i,n,m,k,aux,dr,st;

void schimba(int poz, int val)
{
	while(poz<=n)
	{
		C[aux=poz]-=val;
		k=0;
		while( !(aux & 1) )
		{
			k++;
			aux>>=1;
		}
		poz+=1 << k;
	}
}

int suma(int poz)
{
	int sum=0;
	while(poz>0)
	{
		sum+=C[aux=poz];
		k=0;
		while( !(aux & 1) )
		{
			k++;
			aux>>=1;
		}
		poz-= 1 << k;
	}
	return sum;
}

int main()
{
	
	in>>n>>m;
	for(i=1;i<=n;i++)
	{
		in>>val;
		schimba(i,-val);
	}
	
	
	for(i=1;i<=m;i++)
	{
		in>>tip;
		if( !tip )
		{
			in>>poz>>val;
			schimba(poz,val);
			continue;
		}
		in>>st>>dr;
		out<<suma(dr)-suma(st-1)<<"\n";
		
		
	}
	
	return 0;
}