Cod sursa(job #384554)

Utilizator raduzerRadu Zernoveanu raduzer Data 20 ianuarie 2010 13:31:42
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <cstdio>

#define lsb(i) (int)(i & -i)

int n, m;
int aib[15010];

void update(int poz, int val)
{
	for (; poz <= n; poz += lsb(poz))
		aib[poz] -= val;
}

int query(int poz)
{
	int ret = 0;

	for (; poz; poz &= poz - 1)
		ret += aib[poz];

	return ret;
}

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

	scanf("%d %d", &n, &m);

	for (int i = 1; i <= n; ++i)
	{
		scanf("%d", &r1);
		aib[i + lsb(i)] += aib[i] += r1;
	}

	for (; m; --m)
	{
		scanf("%d %d %d", &q, &r1, &r2);

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