Cod sursa(job #503944)

Utilizator PlayLikeNeverB4George Marcus PlayLikeNeverB4 Data 25 noiembrie 2010 21:07:46
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>

const int maxn=15001;
int i,N,M,cod,a,b,S,A[maxn],Arb[5*maxn];

void update(int k, int st, int dr)
{
	if(st==dr)
	{
		Arb[k]=A[st];
		return;
	}
	int m=st+(dr-st)/2;
	if(a<=m) update(2*k,st,m);
		else update(2*k+1,m+1,dr);
	Arb[k]=Arb[2*k]+Arb[2*k+1];
}

void caut(int k, int st, int dr)
{
	if(a<=st && dr<=b)
	{
		S+=Arb[k];
		return;
	}
	int m=st+(dr-st)/2;
	if(a<=m) caut(2*k,st,m);
	if(b>m) caut(2*k+1,m+1,dr);
}

int main()
{
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	scanf("%d %d",&N,&M);
	for(i=1;i<=N;i++)
	{
		scanf("%d",&A[i]);
		a=i; b=A[i];
		update(1,1,N);
	}
	for(i=1;i<=M;i++)
	{
		scanf("%d %d %d",&cod,&a,&b);
		if(cod==0)
		{
			A[a]-=b;
			update(1,1,N);
		}
		else // cod == 1
		{
			S=0;
			caut(1,1,N);
			printf("%d\n",S);
		}
	}
}