Cod sursa(job #405079)

Utilizator loginLogin Iustin Anca login Data 27 februarie 2010 14:32:01
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
# include <fstream>
# include <cstdio>
using namespace std;
# define max Max
int n, m, v[600000], poz, x, a, b, max;

void arb (int nod, int st, int dr)
{
	if (st==dr)
	{
		v[nod]=x;
		return;
	}
	int mij=(st+dr)/2;
	if (poz<=mij)arb(2*nod, st, mij);
	else arb(2*nod+1, mij+1, dr);
	if (v[2*nod]>v[2*nod+1])v[nod]=v[2*nod];
	else v[nod]=v[2*nod+1];
}

void cauta (int nod, int st, int dr)
{
	if (a<=st && dr<=b)
	{
		if (max<v[nod])max=v[nod];
		return;
	}
	int mij=(st+dr)/2;
	if (a<=mij)cauta(2*nod, st, mij);
	if (mij<b)cauta(2*nod+1, mij+1, dr);
}
	
int main ()
{
	ifstream fin ("arbint.in");
	freopen ("arbint.out", "w", stdout);
	fin>>n>>m;
	for (int i=1;i<=n;i++)
	{
		fin>>x;
		poz=i;
		arb(1, 1, n);
	}
	int k;
	for (;m;--m)
	{
		fin>>k>>a>>b;
		if (k==0)
		{
			max=-1;
			cauta(1, 1, n);
			printf("%d\n", max);
		}
		else
		{
			poz=a;
			x=b;
			arb(1, 1, n);
		}
	}
	return 0;
}