Cod sursa(job #229929)

Utilizator AndreyPAndrei Poenaru AndreyP Data 12 decembrie 2008 09:59:27
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include<stdio.h>
int n,m,a[15005],val;
int nrb(int x)
{
	return (x&(x-1))^x;
}
void adauga(int x)
{
	a[x]-=val;
	while((x+=nrb(x))<=n)
		a[x]-=val;
}
void adauga1(int x)
{
	a[x]+=val;
	while((x+=nrb(x))<=n)
		a[x]+=val;
}
int suma(int x)
{
	int s=a[x];
	while((x-=nrb(x)))
		s+=a[x];
	return s;
}
int main()
{
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	int c,x,y;
	scanf("%d%d",&n,&m);
	for(int i=1; i<=n; i++)
	{
		scanf("%d",&val);
		adauga1(i);
	}
	for(; m; m--)
	{
		scanf("%d%d%d",&c,&x,&y);
		if(!c)
		{
			val=y;
			adauga(x);
		}
		else
			printf("%d\n",suma(y)-suma(x-1));
	}
	return 0;
}