Cod sursa(job #472693)

Utilizator andunhillMacarescu Sebastian andunhill Data 26 iulie 2010 12:44:36
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
long long N,M,i,x,op,y,max1;
long long arbint[400001];
void update(int nod, int left, int right , int poz , int val)
{	if(left==right)
	{	arbint[nod]=val;
		return;
	}
	int mid=(left+right)/2;
	if(poz<=mid)
		update(2*nod,left,mid,poz,val);
	else
		update(2*nod+1,mid+1,right,poz,val);
	arbint[nod]=max(arbint[2*nod],arbint[2*nod+1]);
}
void query(int nod, int left, int right)
{	if(x<=left && right<=y)
	{	if(max1<arbint[nod])
		{	max1=arbint[nod];
			return;
		}
	}
	else
	{	int mid=(left+right)/2;
		if(x<=mid)
			query(nod*2,left,mid);
		else
			query(nod*2+1,mid+1,right);
	}
}

int main()
{	f>>N>>M;
	for(i=1;i<=N;i++)
	{	f>>x;
		update(1,1,N,i,x);
	}
	for(i=1;i<=M;i++)
	{	f>>op>>x>>y;
		if(op==0)
		{	max1=-1;
			query(1,1,N);
			g<<max1<<'\n';
		}
		else
			update(1,1,N,x,y);
	}
	f.close();
	g.close();
	return 0;
}