Cod sursa(job #999751)

Utilizator andreiiiiPopa Andrei andreiiii Data 21 septembrie 2013 13:10:10
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include <cstdio>
#define N 15001
#define zeros(x) (((x)^(x-1))&(x))
using namespace std;

int a[N];
int n;

int query(int poz)
{
	int ret=0;
	while(poz)
	{
		ret+=a[poz];
		poz-=zeros(poz);
	}
	return ret;
}

void update(int poz, int val)
{
	while(poz<=n)
	{
		a[poz]-=val;
		poz+=zeros(poz);
	}
}

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