Cod sursa(job #609155)

Utilizator soriynSorin Rita soriyn Data 19 august 2011 19:15:34
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<stdio.h>

#define maxn 15005

#define zeros(x) ( ( x^ (x-1) ) & x )


int AIB[maxn],N,M;


void Update(int x,int val,int q)
{
	if(q==0)
	for(int i=x;i<=N;i+=zeros(i))
		AIB[i]+=val;
	else if(q==1)
		for(int i=x;i<=N;i+=zeros(i))
		AIB[i]-=val;
}


int Query(int x)
{
	int sum=0;
	for(int i=x;i>0;i-=zeros(i))
		sum+=AIB[i];
	return sum;
}

int main()
{
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	
	int op,a,b;
	scanf("%d %d",&N,&M);
	for(int i=1;i<=N;i++)
	{
		scanf("%d",&a);
		Update(i,a,0);
	}
	
	for(int i=1;i<=M;i++)
	{
		scanf("%d %d %d",&op,&a,&b);
		if(op==0) Update(a,b,1);
		else if(op==1) printf("%d\n",Query(b)-Query(a-1));
	}
}