Cod sursa(job #129759)

Utilizator vasilica07Vasilica A vasilica07 Data 30 ianuarie 2008 03:04:18
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <cstdio>

using namespace std;
int tree[15001];
int n, m;

void update(int, int);
int getVal(int);

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

	int i, j;
	scanf("%d %d", &n, &m);
	int x;
	for (i = 1; i <= n; ++i) scanf("%d", &x), update(i, x);
	while (m--) 
	{
		int cod, A, B;
		scanf("%d %d %d", &cod, &A, &B);
		if (!cod) update(A, -B);
		else printf("%d\n", getVal(B) - getVal(A-1));
	};
	return 0;
};
void update(int idx, int v) 
{
	while (idx <= n) 
	{
		tree[idx]+= v;
		idx += (idx & -idx);
	};
};
int getVal(int idx) 
{
	int ret = 0;
	while (idx > 0) 
	{
		ret+= tree[idx];
		idx -= (idx & -idx);
	}
	return ret;
};