Cod sursa(job #1163604)

Utilizator vladutz15FMI Cornoiu Vlad vladutz15 Data 1 aprilie 2014 14:58:22
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#define maxx(a,b) ((a>b)?a:b)
#define dim 100001
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,i,x,pos,val,xx,a,b,st,fin,maxim,arb[4*dim+66];
void update(int nod, int left, int right)
{
	if (left==right)
	{
		arb[nod]=val;
		return;
	}
	int dif=(left+right)/2;
	if (pos<=dif) update(2*nod,left,dif);
	else update(2*nod+1,dif+1,right);
	arb[nod]=maxx(arb[2*nod],arb[2*nod+1]);
}
void query(int nod, int left, int right)
{
	if (st<=left && right<=fin)
	{
		if (maxim<arb[nod]) maxim=arb[nod];
		return;
	}
	int div=(left+right)/2;
	if (st<=div) query(2*nod,left,div);
	if (div<fin) query(2*nod+1,div+1,right);
}
int main ()
{
	f>>n>>m;
	for (i=1;i<=n;i++)
	{
		f>>xx;
		pos=i;
		val=xx;
		update(1,1,n);
	}
	for (i=1;i<=m;i++)
	{
		f>>x>>a>>b;
		if (x==0)
		{
			maxim=-1;
			st=a;
			fin=b;
			query(1,1,n);
			g<<maxim<<"\n";
		}
		else
		{
			pos=a;
			val=b;
			update(1,1,n);
		}
	}
}