Cod sursa(job #549052)

Utilizator acelasi7Tudor Maxim acelasi7 Data 8 martie 2011 09:38:54
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include<stdio.h>
#define nrn 15002
#define zzz(x) ((x^(x-1))&x)
using namespace std;
FILE *in=fopen("datorii.in","r"),*out=fopen("datorii.out","w");
int n,aib[nrn];
long long S;
void update(int val,int ind)
{
	for(ind=ind;ind<=n;ind+=(zzz(ind)))
	{
		aib[ind]+=val;
	}
}
long long suma(int ind)
{
	S=0;
	for(ind=ind;ind>0;ind-=(zzz(ind)))
	{
		S+=aib[ind];
	}
	return S;
}
int main()
{
	int a,b,i,c,x,m;
	fscanf(in,"%d %d",&n,&m);
	for(i=1;i<=n;i++)
	{
		fscanf(in,"%d",&x);
		update(x,i);
	}
	for(i=1;i<=m;++i)
	{
		fscanf(in,"%d %d %d",&c,&a,&b);
		switch(c)
		{
		case(0):update(-b,a);break;
		case(1):fprintf(out,"%lld\n",suma(b)-suma(a-1));break;
		}
	}
	return 0;
}