Cod sursa(job #472788)

Utilizator andunhillMacarescu Sebastian andunhill Data 26 iulie 2010 16:49:53
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int N,M,i,x,zi,op,a,b,sum;
int arb[30001];
void update(int nod, int left,int right,int val)
{	if(left==right)
	{	arb[nod]+=x*val;
		return;
	}
	else
	{	int mid=(left+right)>>1;
		if(zi<=mid)
			update(2*nod,left,mid,val);
		else
			update(2*nod+1,mid+1,right,val);
	}
	arb[nod]=arb[2*nod]+arb[2*nod+1];
}
void query(int nod, int left, int right)
{	if(a<=left && right<=b)
	{	sum+=arb[nod];
		return;
	}
	else
	{	int mid=(left+right)>>1;
		if(a<=mid)
			query(2*nod,left,mid);
		if(mid<b)
			query(2*nod+1,mid+1,right);
	}
}
int main()
{	f>>N>>M;
	for(i=1;i<=N;i++)
	{	f>>x;
		zi=i;
		update(1,1,N,1);
	}
	for(i=1;i<=N;i++)
	{	f>>op>>a>>b;
		if(!op)
		{	zi=a;
			x=b;
			update(1,1,N,-1);
		}
		else
		{	sum=0;
			query(1,1,N);
			g<<sum<<'\n';
		}
	}
	f.close();
	g.close();
	return 0;
}