Cod sursa(job #1323646)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 21 ianuarie 2015 13:14:41
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>
int a[60001],arr[15001],n,nr,m;
void plas(int pos,int st,int dr,int nod)
{
	if(st==dr)
	{
		a[nod]=nr;
	}
	else
	{
		int mij=(st+dr)/2;
		if(pos<=mij) plas(pos,st,mij,2*nod);
		else plas(pos,mij+1,dr,2*nod+1);
		a[nod]=a[2*nod]+a[2*nod+1];
	}
}
int inter(int p1,int p2,int st,int dr,int nod)
{
	if(st==p1&&dr==p2) return a[nod];
	else
	{
		int mij=(st+dr)/2;
		if(p2<=mij) return inter(p1,p2,st,mij,2*nod);
		else if(p1>mij) return inter(p1,p2,mij+1,dr,2*nod+1);
		else
		{
			return inter(p1,mij,st,mij,2*nod)+inter(mij+1,p2,mij+1,dr,2*nod+1);
		}
	}
}
int main()
{
	freopen ("datorii.in","r",stdin);
	freopen ("datorii.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&nr);
		arr[i]=nr;
		plas(i,1,n,1);
	}
	int tip,p1,p2;
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&tip,&p1,&p2);
		if(tip==1) printf("%d\n",inter(p1,p2,1,n,1));
		else
		{
			arr[p1]-=p2;
			nr=arr[p1];
			plas(p1,1,n,1);
		}
	}
}