Cod sursa(job #381883)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 11 ianuarie 2010 21:56:08
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>
#define DIM 15010

using namespace std;

int aib [DIM], N;
inline int lsb (int x)
{
	return ( x & (x - 1) ^ x );
}
void update (int k, int val, int pr)
{
	while (k <= N)
	{
		aib [k] += val*pr;
		k += lsb (k);
	}
}
int query (int k)
{
	int sum = 0;
	while ( k > 0 )
	{
		sum += aib [k];
		k -= lsb (k);
	}
	return sum;
}
void read ()
{   
	int i, M, p, q, t, v, op, a;
	scanf ("%d%d\n", &N, &M);
	for (i = 1; i <= N; i++)
	{
		scanf ("%d", &a);
		update (i, a, 1);
	}
	for ( ; M--; )
	{
		scanf ("%d", &op);
		if (op == 0)
		{
			scanf ("%d%d\n", &t, &v);
			update (t, v, -1);
		}
		else
		{
			scanf ("%d%d", &p, &q);
			printf ("%d\n",query (q) - query (p - 1));
		}
	}
}
int main ()
{
	freopen ("datorii.in", "r", stdin);
	freopen ("datorii.out", "w", stdout);
	read ();
	return 0;
}