Cod sursa(job #458195)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 23 mai 2010 19:19:43
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <cstdio>

#define file_in "datorii.in"
#define file_out "datorii.out"

#define zero(x) ((x^(x-1))&x)

int n,m,aib[101000];

void add(int poz, int val)
{
	int i;
	
	for (i=poz;i<=n;i+=zero(i))
		  aib[i]+=val;
}


int query(int x)
{
	int rez=0,i;
	
	for (i=x;i>=1;i-=zero(i))
		 rez+=aib[i];
	return rez;
}

void citire()
{
	int i,x;
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d", &n, &m);
	for (i=1;i<=n;++i)
	{
		scanf("%d", &x);
		add(i,x);
	}
}

	
void solve()
{
	int tip,a,b;
	while(m--)
	{
		scanf("%d %d %d", &tip, &a, &b);
		
		if (tip==0)
			add(a,-b);
		else
			printf("%d\n", query(b)-query(a-1));
	}
	
}

int main()
{
	citire();
	solve();
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}