Cod sursa(job #1258357)

Utilizator ade_tomiEnache Adelina ade_tomi Data 8 noiembrie 2014 19:27:36
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
int v[60005],x,a,b,poz,sol,n,k,i,q;
int maxi(int aa, int bb)
{
	if(aa>bb)
		return aa;
	return bb;
}

void update(int st, int dr , int nod)
{
	if(st==dr)
		v[nod]+=x;
	else
	{
		int mij=(st+dr)/2;
		if(poz<=mij)
			update(st,mij,2*nod);
		else
			update(mij+1,dr,2*nod+1);
		v[nod]=v[2*nod]+v[2*nod+1];
	}
}
int querry( int st, int dr , int nod)
{
	if(st>=a&&dr<=b)
		sol+=v[nod];
	else
	{
		int mij=(st+dr)/2;
		if(a<=mij)
			querry(st,mij,2*nod);
		if(mij<b)
			querry(mij+1,dr,2*nod+1);
	}
}

int main()
{
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	scanf("%d%d",&n,&k);
	for(i=1;i<=n;i++)
	{
		poz=i;
		scanf("%d",&x);
		update(1,n,1);
	}
	for(i=1;i<=k;i++)
	{
		scanf("%d",&q);
		if(q==0)
		{
			scanf("%d %d",&a,&b);
			poz=a;
			x=-b;
			update(1,n,1);
		}
		else
		{
			sol=0;
			scanf("%d%d",&a,&b);
			querry(1,n,1);
			printf("%d\n",sol);
		}
	}
	return 0;
}