Cod sursa(job #570286)

Utilizator HoriaClementHoriaC HoriaClement Data 2 aprilie 2011 19:54:13
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>

using namespace std;

int n,t,x,v[15001],a[60001],s,a1,b1;

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

void mod(int n,int p,int u,int x,int poz)
{
	int m;
	if(p==u)
	{
		a[n]+=poz;
		return ;
	}
	m=(p+u)>>1;
	if(x<=m)
		mod(n*2,p,m,x,poz);
	else
		mod(n*2+1,m+1,u,x,poz);
	a[n]=a[n*2]+a[n*2+1];
}	

void query(int nod,int p,int u,int x,int y)
{
	int m;
	if(x<=p && y>=u)
	{
		s+=a[nod];
		return;
	}
	m=(p+u)>>1;
	if(x<=m)
		query(nod*2,p,m,x,y);
	if(m<y)
		query(nod*2+1,m+1,u,x,y);
}
void rez()
{
	in>>n>>t;
	for(int i=1;i<=n;++i)
	{
		in>>x;
		mod(1,1,n,i,x);
	}
	for(int i=1;i<=t;++i)
	{
		in>>x;
		if(!x)
		{
			in>>a1>>b1;
			mod(1,1,n,a1,-b1);
			continue;
		}
		in>>a1>>b1;
		s=0;
		query(1,1,n,a1,b1);
		out<<s<<"\n";
	}

}

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