Cod sursa(job #973054)

Utilizator predatorGigi Valoare predator Data 13 iulie 2013 11:45:30
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<fstream>
#define NM 100000
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int A[NM],i,j,n,m,a,b,t,x,S;
void divide(int st,int dr,int po)
{
	if(st==dr)
	{
		A[po]+=x;
		return;
	}
	int mij=(st+dr)>>1;
	if(i<=mij)
		divide(st,mij,(po<<1));
	else
		divide(mij+1,dr,(po<<1)+1);
	A[po]=A[po<<1]+A[(po<<1)+1];
}
void find(int st,int dr,int po)
{
	if(st>=a&&dr<=b)
	{
		S+=A[po];
		return;
	}
	int mij=(st+dr)>>1;
	if(a<=mij)
		find(st,mij,(po<<1));
	if(b>mij)
		find(mij+1,dr,(po<<1)+1);
}
int main()
{
	f>>n>>m;
	for(i=1;i<=n;++i)
	{
		f>>x;
		divide(1,n,1);
	}
	for(j=1;j<=n;++j)
	{
		f>>t;
		if(!t)
		{
			f>>i>>x;
			x=-x;
			divide(1,n,1);
		}
		else
		{
			f>>a>>b;
			S=0;
			find(1,n,1);
			g<<S<<"\n";
		}
	}
	return 0;
}