Cod sursa(job #168412)

Utilizator mike4problemsRadu Gabriel mike4problems Data 31 martie 2008 12:32:21
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<fstream>
using namespace std;

ifstream fin("datorii.in");
ofstream fout("datorii.out");

#define Max 15000

int a[5*Max],n,poz,start,end,val,sum;
void modi(int,int,int);
void suma(int,int,int);

int main()
{
	int k,t;
	fin>>n>>t;
	for(poz=1;poz<=n;poz++)
	{
		fin>>val;
		modi(1,1,n);
	}
	while(t--)
	{
		fin>>k;
		switch(k)
		{
			case 0: fin>>poz>>val; val=-val; modi(1,1,n); break;
			case 1: fin>>start>>end; sum=0; suma(1,1,n); fout<<sum<<'\n';
		}
	}
	return 0;
}

void modi(int k,int i,int j)
{
	if(i==j)
	{
		a[k]+=val;
		return;
	}
	int mij=(i+j)/2;
	if(poz<=mij) modi(2*k,i,mij);
	else modi(2*k+1,mij+1,j);
	a[k]=a[2*k]+a[2*k+1];
}

void suma(int k,int i,int j)
{
	if(start<=i&&j<=end)
	{
		sum+=a[k];
		return;
	}
	int mij=(i+j)/2;
	if(start<=mij) suma(2*k,i,mij);
	if(mij<end) suma(2*k+1,mij+1,j);
}