Cod sursa(job #93837)

Utilizator recviemAlexandru Pana recviem Data 20 octombrie 2007 14:14:21
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <stdio.h>

int c[15000],a[15000],n;
long m;

void push(int k,int x)
{
	while (k<=m)
	{
		c[k] -= x;
		k=k+((k^(k-1))&k);		
	}
}

long suma(int k)
{
	int rez=0;
	while (k>0)
	{
		rez+=c[k];
		k=k-((k^(k-1))&k);		
	}
	return rez;
}

void citire()
{
	freopen("datorii.in","r",stdin);
	scanf("%d%d",&m,&n);
	for (int i=1;i<=m;i++)
	{
		int z;
		scanf("%d",&z);
		push(i,-1*z);
	}
	for(int i=0;i<n;i++)
	{
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		switch (x)
		{
			case 0: push (y,z); break;
			case 1: printf("%ld\n",suma(z)-suma(y-1)); break;
		}
	}
	fclose(stdin);
}

int main()
{
	freopen("datorii.out","w",stdout);
	citire();
	fclose(stdout);
	return 0;
}