Cod sursa(job #430313)

Utilizator slayer4uVictor Popescu slayer4u Data 30 martie 2010 21:50:58
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <cstdio>
using namespace std;

#define zeros(x) (x ^ (x - 1)) & x
#define NMAX 15050

long a, b, n, m, code, aib[NMAX];

void add(long index, long quantity)
{
	for (long i = index; i <= n; i += zeros(i))
		aib[i] += quantity;
}

long compute(long index)
{
	long tmp = 0;
	for (long i = index; i; i -= zeros(i))
		tmp += aib[i];
	return tmp;
}

int main()
{
	freopen ("datorii.in", "rt", stdin);
	freopen ("datorii.out", "wt", stdout);

	scanf("%ld %ld", &n, &m);
	for (long i = 1; i <= n; ++i)
		scanf("%ld", &a), add(i, a);

	for (long i = 1; i <= m; ++i)
	{
		scanf("%ld %ld %ld", &code, &a, &b);
		if (!code)
			add(a, -b);
		else
			printf("%ld\n", compute(b) - compute(a - 1));
	}

	return 0;
}