Cod sursa(job #651402)

Utilizator akumariaPatrascanu Andra-Maria akumaria Data 20 decembrie 2011 11:34:14
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include<stdio.h>

//ultimul bit de 1 este (x ^ (x-1)) & x




int n,a[15005],aib[15005];


void update(int i, int val)
{
	while(i<=n)
	{
		aib[i]+=val;
		i+=((i^(i-1))+1)>>1;
	}
}



int query(int i)
{
	int nr=0;
	if(i==1)
		return aib[i];
	while(i>1)
	{
		nr=nr+aib[i];
		i-=((i^(i-1))+1)>>1;
	}
	return nr;
}





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