Cod sursa(job #1081575)

Utilizator vladrochianVlad Rochian vladrochian Data 13 ianuarie 2014 18:54:29
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
using namespace std;
int n,m,ai[262144],o,p1,p2,mx;
void Query(int nod,int l,int r)
{
	if(p1<=l&&r<=p2)
	{
		if(ai[nod]>mx)
			mx=ai[nod];
		return;
	}
	int m=(l+r)>>1;
	if(p1<=m)
		Query(nod<<1,l,m);
	if(m<p2)
		Query((nod<<1)+1,m+1,r);
}
void Update(int nod,int l,int r)
{
	if(l==r)
	{
		ai[nod]=p2;
		return;
	}
	int m=(l+r)>>1,ls=nod<<1,rs=ls+1;
	if(p1<=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(p1=1;p1<=n;p1++)
	{
		fin>>p2;
		Update(1,1,n);
	}
	while(m--)
	{
		fin>>o>>p1>>p2;
		if(o)
			Update(1,1,n);
		else
		{
			mx=0;
			Query(1,1,n);
			fout<<mx<<"\n";
		}
	}
	return 0;
}