Cod sursa(job #617346)

Utilizator selea_teodoraSelea Teodora selea_teodora Data 14 octombrie 2011 17:09:54
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<fstream>
using namespace std;
int n,m,arb[400005],i,val,pos,x,start,finish,a,b,s;
void update(int nod, int left, int right)
{
	if(left==right)
	{
		arb[nod]-=val;
		return;
	}
	int div=(left+right)/2;
	
	if(pos<=div)
		update(2*nod,left,div);
	else
		update(2*nod+1,div+1,right);
	arb[nod]=arb[2*nod+1]+arb[2*nod];
}
void query(int nod,int left, int right)
{
	if(start<=left && finish>=right)
	{
		s+=arb[nod];
		return;
	}
	int div=(left+right)/2;
	
	if(start<=div)
		query(2*nod,left,div);
	if(finish>div)
		query(2*nod+1,div+1,right);
}
int main()
{
	ifstream fin("datorii.in");
	fin>>n>>m;
	for(i=1;i<=n;i++)
	{
		fin>>x;
		pos=i;
		val=-x;
		update(1,1,n);
	}
	ofstream fout("datorii.out");
	for(i=1;i<=m;i++)
	{
		fin>>x>>a>>b;
		if(x==1)
		{
			s=0;
			start=a;
			finish=b;
			query(1,1,n);
			fout<<s<<'\n';
		}
	   else
	   {
		   pos=a;
		   val=b;
		   update(1,1,n);
	   }
	}
  fin.close();
  fout.close();
  return 0;
}