Cod sursa(job #427813)

Utilizator bog29Antohi Bogdan bog29 Data 28 martie 2010 14:20:10
Problema Datorii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<fstream>
#define dmax 15005
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");

int n,m,x,poz,v,s[dmax],st,f;
long long arb[5*dmax],sum;

void update(int nod,int l,int r)
{	int m;
	if(l == r)
	{	arb[nod]=v;
		return ;
	}
	m=(l+r)/2;
	if( poz <= m)update(2*nod,l,m);	
	else update(2*nod+1,m+1,r);
	arb[nod]=arb[2*nod]+arb[2*nod+1];
}	

void query(int nod,int l,int r)
{	int m;
	if( st<=l && r<=f)
	{	sum+=arb[nod];
		return ;
	}
	m=(l+r)/2;
	if(st <= m)query(2*nod,l,m);
	if(f > m)query(2*nod+1,m+1,r);	
}

int main()
{	int i,op,a,b;
	in>>n>>m;
	for(i=1;i<=n;i++)
	{	in>>s[i];
		poz=i;
		v=s[i];
		update(1,1,n);
	}	
	for(i=1;i<=m;i++)
	{	in>>op>>a>>b;	
		if(op==0)
		{	poz=a;
			v=s[a]-b;
			s[a]-=b;
			update(1,1,n);
		}	
		else
		{	st=a;
			f=b;
			sum=0;
			query(1,1,n);
			out<<sum<<'\n';
		}	
	}		
	in.close();
	out.close();
	return 0;
}