Cod sursa(job #444029)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 19 aprilie 2010 08:17:51
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<stdio.h>
#define Nmax 15010

int Aib[Nmax],poz,val,x,i,n,m,op;

void update(int poz)
{
	int k=0;
	
	while(poz<=n)
	{
		Aib[poz]+=val;
		while(!(poz&(1<<k))) k++;
		poz+=(1<<k);
		k++;
	}
}

int query(int poz)
{
	int s=0,k=0;
	
	while(poz>0)
	{
		s+=Aib[poz];
		while(!(poz&(1<<k))) k++;
		poz-=(1<<k);
		k++;
	}
	return s;
}

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",&val);
		update(i);
	}
	
	for(i=1;i<=m;i++)
	{
		scanf("%d %d %d",&op,&poz,&val);
		
		
		if(!op)
		{
			val*=(-1);
			update(poz);
		}
		else
			printf("%d\n",query(val)-query(poz-1));
	}
	
	return 0;
}