Cod sursa(job #229783)

Utilizator ZillaMathe Bogdan Zilla Data 11 decembrie 2008 19:01:22
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <stdio.h>

int N,arb[100001],x,M,T,op,sum;

void update(int,int,int,int);
void query(int,int,int);

int main()
{
	int i;
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	scanf("%d%d",&N,&M);
	for(i=1;i<=N;++i)
		{
			scanf("%d",&x);
			update(1,N,i,1);
		}
	for(i=1;i<=M;++i)
		{
			scanf("%d",&op);
			if(op==0)
				{
					scanf("%d%d",&T,&x);
					x=-x;
					update(1,N,T,1);
				}
			else
				{
					scanf("%d%d",&T,&x);
					sum=0;
					query(1,N,1);
					printf("%d\n",sum);
				}
		}
	return 0;

}

void update(int st, int dr, int i, int pas)
{
	int mij;
	mij=(st+dr)/2;
	if(st==dr)
		arb[pas]+=x;
	else
		{
			arb[pas]+=x;
			if(i<=mij)
				update(st,mij,i,pas*2);
			else
				update(mij+1,dr,i,pas*2+1);
		}

}
void query(int st, int dr, int pas)
{
	int mij;
	if(st>=T&&dr<=x)
	sum+=arb[pas];
	else
		{
			mij=(st+dr)/2;
			if(T<=mij)
				query(st,mij,pas*2);
			if(x>mij)
				query(mij+1,dr,pas*2+1);
		}
}