Cod sursa(job #645686)

Utilizator ms-ninjacristescu liviu ms-ninja Data 10 decembrie 2011 12:24:12
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
long val,poz,sol[100005],maxim,inc,sf;

void update(int nod, int st, int dr)
{
	if(st==dr)
	{
		sol[nod]=val;
		return;
	}
	
	int mijloc=(st+dr)/2;
	if(poz<=mijloc)
		update(nod*2,st,mijloc);
	else
		update(nod*2+1,mijloc+1,dr);
	
	sol[nod]=max(sol[nod*2],sol[nod*2+1]);
}

void query(int nod, int st, int dr)
{
	if(inc<=st && dr<=sf)
	{
		if(maxim<sol[nod])
			maxim=sol[nod];
		return;
	}
	int mijloc=(st+dr)/2;
	if(inc<=mijloc)
		query(nod*2,st,mijloc);
	if(mijloc<sf)
		query(nod*2+1,mijloc+1,dr);
}

int main()
{
	int n, m, x, i,tip,a,b;
	fin>>n >>m;
	
	for(i=1;i<=n;++i)
	{
		fin>>x;
		poz=i;
		val=x;
		update(1,1,n);
	}
	
	for(i=1;i<=m;++i)
	{
		fin>>tip >>a >>b;
		if(tip==1)
		{
			poz=a;
			val=b;
			update(1,1,n);
		}
		else
		{
			inc=a;
			sf=b;
			maxim=-1;
			query(1,1,n);
			fout<<maxim<<'\n';
		}
	}
	
	return 0;
}