Cod sursa(job #202045)

Utilizator AndreyPAndrei Poenaru AndreyP Data 5 august 2008 19:09:30
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<stdio.h>
#define N 15005
int s;
int t[3*N],n,m,a,b,val,poz,x,y,z;
void actual(int p,int u,int i)
{
	t[i]-=val;
	if(p==u)
		return;
	int m=(p+u)>>1;
	if(poz<=m)
		actual(p,m,i<<1);
	else
		actual(m+1,u,(i<<1)+1);
}
void actual1(int p,int u,int i)
{
	t[i]+=val;
	if(p==u)
		return;
	int m=(p+u)>>1;
	if(poz<=m)
		actual1(p,m,i<<1);
	else
		actual1(m+1,u,(i<<1)+1);
}
void suma(int p,int u,int i)
{
	if(a<=p && u<=b)
	{
		s+=t[i];
		return;
	}
	int m=(p+u)>>1;
	if(a<=m)
		suma(p,m,i<<1);
	if(b>m)
		suma(m+1,u,(i<<1)+1);
}
int main()
{
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(poz=1; poz<=n; poz++)
	{
		scanf("%d",&val);
		actual1(1,n,1);
	}
	for(; m; m--)
	{
		scanf("%d%d%d",&x,&y,&z);
		if(x)
		{
			s=0;
			a=y;
			b=z;
			suma(1,n,1);
			printf("%d\n",s);
		}
		else
		{
			poz=y;
			val=z;
			actual(1,n,1);
		}
	}
	return 0;
}