Cod sursa(job #123959)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 17 ianuarie 2008 20:00:24
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>
#include <math.h>
long n, m, c[15010];

int main()
{
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	
	long i, poz, x, j, op, s1, s2, st, dr;
	scanf("%ld %ld", &n, &m);
	for (i = 1; i <= n; i++)
	{
		j = i;
		scanf("%ld",&x);
		while (j <= n)
		{
			c[j] += x;
			j += (j ^ (j-1)) & j;
		}
	}

	for (i = 1; i <= m; i++)
	{
		scanf ("%ld %ld %ld", &op, &st, &dr);
		if (op)
		{
			s1 = 0;
			while (dr > 0)
			{
				s1 += c[dr];
				dr -= (dr ^ (dr-1)) & dr;
			}

			st--;
			s2 = poz = 0;
			while (st > 0)
			{
				s2 += c[st];
				st -= (st ^ (st-1)) & st;
			}
			printf("%ld\n",s1 - s2);
		}

		else
		{
			while (st <= n)
			{
				c[st] -= dr;
				st += (st ^ (st-1)) & st;
			}
		}
	}
	return 0;
}