Cod sursa(job #923978)

Utilizator raulstoinStoin Raul raulstoin Data 23 martie 2013 23:49:16
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
#include<algorithm>
#define NMAX 100005
using namespace std;
int n,m,AINT[(1<<18)+5],val,poz,maxim;
inline void update(int left,int right,int nod)
{
	if(left==right)
	{
		AINT[nod]=val;
		return;
	}
	int mid=(left+right)/2;
	if(poz<=mid)
		update(left,mid,2*nod);
	else
		update(mid+1,right,2*nod+1);
	AINT[nod]=max(AINT[2*nod],AINT[2*nod+1]);
}
inline void query(int L,int R,int left,int right,int nod)
{
	if(L<=left && right<=R)
	{
		maxim=max(maxim,AINT[nod]);
		return;
	}
	int mid=(left+right)/2;
	if(L<=mid)
		return query(L,R,left,mid,2*nod);
	return query(L,R,mid+1,right,2*nod+1);
}
int main()
{
	ifstream fin("arbint.in");
	ofstream fout("arbint.out");
	fin>>n>>m;
	int L,R;
	for(int i=1;i<=n;i++)
	{
		fin>>val;
		poz=i;
		update(1,n,1);
	}
	for(int i=1;i<=m;i++)
	{
		fin>>val;
		if(val)
		{
			fin>>poz>>val;
			update(1,n,1);
			continue;
		}
		maxim=-1;
		fin>>L>>R;
		query(L,R,1,n,1);
		fout<<maxim<<'\n';		
	}
	return 0;
}