Cod sursa(job #807904)

Utilizator raulstoinStoin Raul raulstoin Data 5 noiembrie 2012 21:38:48
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<cstdio>
#define nmax 15005
using namespace std;
int n,m,v[nmax],aib[nmax];
void add(int poz,int val)
{
	int i;
	for(i=poz;i<=n;i+=(i&(-i)))
		aib[i]+=val;
}
void update(int poz,int val)
{
	int i;
	for(i=poz;i<=n;i+=(i&(-i)))
		aib[i]-=val;
}
int query(int a,int b)
{
	int i,s=0;
	for(i=b;i;i-=(i&(-i)))
		s+=aib[i];
	for(i=a-1;i;i-=(i&(-i)))
		s-=aib[i];
	return s;
}
int main()
{
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	scanf("%d %d",&n,&m);
	int i;
	for(i=1;i<=n;i++)
		scanf("%d",&v[i]);
	for(i=1;i<=n;i++)
		add(i,v[i]);
	while(m--)
	{
		int choice,a,b;
		scanf("%d",&choice);
		switch(choice)
		{
			case 0:
				{
					scanf("%d %d",&a,&b);
					update(a,b);
					break;
				}
			case 1:
				{
					scanf("%d %d",&a,&b);
					printf("%d\n",query(a,b));
					break;
				}
		}
	}
	return 0;
}