Cod sursa(job #1081568)

Utilizator vladrochianVlad Rochian vladrochian Data 13 ianuarie 2014 18:50:23
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#define B(x) x&1?x-1:x+1
using namespace std;
int n,m,ai[262144],o,pos,val,s,e,mx;
void Query(int nod,int l,int r)
{
	if(s<=l&&r<=e)
	{
		if(ai[nod]>mx)
			mx=ai[nod];
		return;
	}
	int m=(l+r)>>1;
	if(s<=m)
		Query(nod<<1,l,m);
	if(m<e)
		Query((nod<<1)+1,m+1,r);
}
void Update(int nod,int l,int r)
{
	if(l==r)
	{
		ai[nod]=val;
		return;
	}
	int m=(l+r)>>1,ls=nod<<1,rs=ls+1;
	if(pos<=m)
		Update(ls,l,m);
	else
		Update(rs,m+1,r);
	ai[nod]=max(ai[ls],ai[rs]);
}
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int main()
{
	fin>>n>>m;
	for(pos=1;pos<=n;pos++)
	{
		fin>>val;
		Update(1,1,n);
	}
	while(m--)
	{
		fin>>o;
		if(o)
		{
			fin>>pos>>val;
			Update(1,1,n);
		}
		else
		{
			fin>>s>>e;
			mx=-1;
			Query(1,1,n);
			fout<<mx<<"\n";
		}
	}
	return 0;
}