Cod sursa(job #307044)

Utilizator pcinfoCarmen Popescu pcinfo Data 22 aprilie 2009 20:30:12
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

using namespace std;

int n;
vector<int> a(15001,0);

void modif(int poz,int x)
{	int c,j;
	a[poz]+=x;
	do
	{
		c=poz;
		j=0;
		while (poz%2==0)
		{	
			poz=poz/2;
			j++;
		}
		poz=c+(1<<j);
		if (poz<=n)
			a[poz]+=x;
		else
			return;
	}while (1);
}

int sum(int poz)
{   int c,j,s;
    

    if (poz<=0) return 0;
	
	s=a[poz];
	do
	{
		c=poz;
		j=0;
		while (poz%2==0)
		{	
			poz=poz/2;
			j++;
		}
		poz=c-(1<<j);
		if (poz>0)
			s=s=s+a[poz];
		else
			return s;
	}while (1);
}

int main()
{
	int m,i,x,y,c;
	
	f>>n>>m;
	
	for (i=1;i<=n;i++)
	{
		f>>x;
		modif(i,x);
		
	}
	
	for (i=1;i<=m;i++)
	{
		f>>c>>x>>y;
		if (c==0)
			modif(x,-y);
		else
			g<<sum(y)-sum(x-1)<<"\n";
	}

	f.close();
	g.close();
	
	return 0;
}