Cod sursa(job #216715)

Utilizator raduzerRadu Zernoveanu raduzer Data 25 octombrie 2008 13:27:42
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <cstdio>

const int MAX_N = 15010;

int n, m;
int aib[MAX_N];

void update(int x, int y)
{
	while (x <= n) 
	{
		x[aib] -= y;
		x += x ^ (x - 1) & x;
	}
}

int query(int x)
{
	int val = 0;

	while (x)
	{
		val += x[aib];
		x &= x - 1;
	}

	return val;
}

int main()
{
	int i, x, y, q;
	freopen("datorii.in", "r", stdin);
	freopen("datorii.out", "w", stdout);

	scanf("%d %d", &n, &m);
	for (i = 1; i <= n; ++i)
	{
		int aux = 0;
		scanf("%d", &aux);
		i[aib] += aux;
		(i + (i ^ (i - 1) & i))[aib] += i[aib];
	}

	for (; m; --m)
	{
		scanf("%d %d %d", &q, &x, &y);

		if (q) printf("%d\n", query(y) - query(x - 1));
		else update(x, y);
	}
}