Cod sursa(job #411406)

Utilizator pykhNeagoe Alexandru pykh Data 4 martie 2010 21:25:06
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include<stdio.h>
const char in[]="datorii.in", out[]="datorii.out";
int n, m, v[1<<14] ;

int k(int x)
	{int y=1, z=1;
	while(x)
		{if(x%2)break;
		++z;
		x>>=1;}
	return z;}		

void upd(int x, int val)
	{
		for(;x<=n;x+=k(x))
			v[x]+=val;
}

int qr(int x)
{
	int sol=0;
	for(;x>0;x-=k(x))
		sol+=v[x];
	return sol;
}

int main()
	{int p, q, op;
		freopen(in,"r",stdin);
		freopen(out,"w",stdout);
		scanf("%d%d", &n, &m);
		for(int i=1;i<=n;++i)
		scanf("%d", &p), upd(i, p);
		for(;m--;)
		{
			scanf("%d%d%d", &op, &p, &q);
			if(!op)upd(p, -q);
			else printf("%d\n", qr(q)-qr(p-1) - 1);
		}
		return 0;
	}