Cod sursa(job #427782)

Utilizator bog29Antohi Bogdan bog29 Data 28 martie 2010 13:51:06
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<fstream>
#define dmax 100004
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");

int n,m,poz,st,f;
long long x,arb[5*dmax],v,mx;

void update(int nod,int l,int r)
{	int m;
	if(l == r)
	{	arb[nod]=v;
		return;
	}
	m=(l+r)/2;
	if(poz <= m)update(2*nod,l,m);
	else update(2*nod+1,m+1,r);	
	arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}

void query(int nod,int l,int r)
{	int m;
	if(st<=l && r<=f)
	{	if(mx < arb[nod] )
			mx=arb[nod];
		return;
	}	
	m=(l+r)/2;
	if(st <= m)query(2*nod,l,m);
	if(m < f) query(2*nod+1,m+1,r);
}

int main()
{	long long i,op,a,b;
	in>>n>>m;
	for(i=1;i<=n;i++)
	{	in>>x;
		poz=i;
		v=x;
		update(1,1,n);
	}	
	for(i=1;i<=m;i++)
	{	in>>op>>a>>b;
		if(op==1)
		{	poz=a;
			v=b;
			update(1,1,n);
		}
		else
		{	mx=-1;
			st=a;
			f=b;
			query(1,1,n);
			out<<mx<<'\n';
		}		
	}	
	in.close();
	out.close();
	return 0;
}