Cod sursa(job #113788)

Utilizator coderninuHasna Robert coderninu Data 11 decembrie 2007 15:42:43
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>
#define Nmax 15001

long c[Nmax], i, j, k, n, m, val, x, y, z;

long suma(long p, long q)
{
	long st=c[--p], dr=c[q];
	while (q)
	{
		for (k=1; !(k&q); k<<=1); q-=k;
		if (q) dr+=c[q];
	}
	while (p)
	{
		for (k=1; !(k&p); k<<=1); p-=k;
		if (p) st+=c[p];
	}
	return dr-st;
}

void add(long p, long v)
{
	c[p]+=v;
	while (p<=n)
	{
		for (k=1; !(k&p); k<<=1); p+=k;
		if (p<=n) c[p]+=v;
	}
}

int main()
{
	freopen("datorii.in", "r", stdin);
	freopen("datorii.out", "w", stdout);
	scanf("%ld %ld\n", &n, &m);
	for (i=1; i<=n; i++)
	{
		scanf("%ld ", &val);
		if (val) add(i,val);
	}
	for (; m; m--)
	{
		scanf("%ld %ld %ld\n", &x, &y, &z);
		if (x) printf("%ld\n", suma(y,z));
		else add(y,-z);
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}