Cod sursa(job #355993)

Utilizator mottyMatei-Dan Epure motty Data 12 octombrie 2009 22:35:29
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<cstdio>

const int N=280001,K=15001;

int n,a,b,m,arb[N],ini[K];

void build( int st,int dr,int poz )
{
	int mij=(st+dr)/2;
	if(st==dr)
	{
		ini[st]=poz;
		return;
	}
	build(st,mij,2*poz);
	build(mij+1,dr,2*poz+1);
}

void up( int i,int x )
{
	int k=ini[i];
	arb[k]=x;
	for( k/=2 ; k ; k/=2 )
		arb[k]=arb[2*k]+arb[2*k+1];
}

int caut( int st,int dr,int poz )
{
	if( a<=st && dr<=b )
		return arb[poz];
	if( st>b || dr<a )
		return 0;
	int mij=(st+dr)/2;
	return caut(st,mij,2*poz)+caut(mij+1,dr,2*poz+1);
}

int main()
{
	int tip,x;
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	scanf("%d%d",&n,&m);
	build(1,n,1);
	for( int i=1 ; i<=n ; ++i )
	{
		scanf("%d",&x);
		up(i,x);
	}
	for( int i=1 ; i<=m ; ++i )
	{
		scanf("%d%d%d",&tip,&a,&b);
		if(tip==0)
			up(a,arb[ini[a]]-b);
		else
			printf("%d\n",caut(1,n,1));
	}
	return 0;
}