Cod sursa(job #299888)

Utilizator spidyvenomMarius Toma spidyvenom Data 7 aprilie 2009 07:53:59
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream.h>
#define nmax 2000010
ifstream f("arbint.in");
ofstream g("arbint.out");

int t[nmax],ret,n,m;

int max(int A,int B)
{
if (A>B) return A;
return B;
}

void update(int nod,int st,int dr,int a,int x)
{
if(a<=st && dr<=a)
	{
	t[nod]=x;
	}
else
	{
	int mij=(st+dr)/2;
	if(a<=mij) update(nod*2,st,mij,a,x);
	if(a> mij) update(nod*2+1,mij+1,dr,a,x);
	t[nod]=max(t[nod*2],t[nod*2+1]);
	}
}

void search(int nod,int st,int dr,int a,int b)
{
if (a<=st && dr<=b)
	{
	ret=max(ret,t[nod]);
	}
else
	{
	int mij=(st+dr)/2;
	if (a<=mij) search(nod*2,st,mij,a,b);
	if (b >mij) search(nod*2+1,mij+1,dr,a,b);
	}
}

int main()
{
f>>n>>m;
int i,x,a,b;
for (i=1;i<=n;++i)
	 {
	 f>>x;
	 update(1,1,n,i,x);
	 }
for (i=1;i<=m;++i)
	 {
	 f>>x>>a>>b;
	 if (x==0)
		{
		ret=-1;
		search(1,1,n,a,b);
		g<<ret<<'\n';
		}
	 else
		{
		update(1,1,n,a,b);
		}
	 }
return 0;
}