Cod sursa(job #44283)

Utilizator TheCreeepIonita Andrei Lucian TheCreeep Data 31 martie 2007 09:08:19
Problema Datorii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <stdio.h>
int X[15001],n,m;
void badd(int ind, int x)
{
	int poz;
	poz=1;
	while (ind<=n)
	{
		X[ind]+=x;
		while ((ind & poz) == 0) poz=poz<<1;
		ind=ind+poz;
		poz=poz<<1;		
	}
}
int bbget(int ind)
{
	int ret=0, poz;
	poz=1;
	while (ind>0)
	{
		ret+=X[ind];
		while((ind & poz)==0) poz=poz<<1;
		ind=ind-poz;
		poz=poz<<1;
	}
	return ret;
}
int bget(int a, int b)
{
	return bbget(b)-bbget(a-1);
}
int main (void)
{
	int a,b,c,i;
	FILE *f=fopen("datorii.in","r");
	FILE *g=fopen("datorii.out","w");
	fscanf(f,"%d %d",&n,&m);
	for(i=1;i<=n;i++)
	{
		fscanf(f,"%d",&a);
		badd(i,a);
	}
	for(;m!=0;m--)
	{
		fscanf(f,"%d %d %d",&a,&b,&c);
		if (a==0) badd(b,-c); else
		fprintf(g,"%d\n",bget(b,c));
	}
	fclose(g);
	fclose(f);
	return 0;
}