Cod sursa(job #316902)

Utilizator freak93Adrian Budau freak93 Data 21 mai 2009 15:38:17
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include<cstdio>
#define maxn 100005

using namespace std;

int a[maxn],i,n,x,y,z,m;

void update(int p,int v)
{
	int c=0;
	while(p<=n)
	{
		a[p]+=v;
		while(!(p&(1<<c))) ++c;
		p+=(1<<c);
		++c;
	}
}

int query(int x)
{
	int c=0,s=0;
	while(x>0)
	{
		s+=a[x];
		while(!(x&(1<<c))) ++c;
		x-=(1<<c);
		++c;
	}
	
	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",&x);
		update(i,x);
	}
	
	for(i=1;i<=m;++i)
	{
		scanf("%d %d %d",&x,&y,&z);
		
		if(x==0)
			update(y,-z);
		else
			printf("%d\n",query(z)-query(y-1));
	}
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}