Mai intai trebuie sa te autentifici.

Cod sursa(job #1260044)

Utilizator gerd13David Gergely gerd13 Data 10 noiembrie 2014 20:38:10
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>

using namespace std ;

const int NMAX = 1000005 ;
const int INF = 0x3f3f3f3f ;


ifstream fin("arbint.in") ;
ofstream fout("arbint.out") ;

int Pos, Val;
int Graph[NMAX * 4] ;
int maxim;
int N, M ;

int st, dr ;

void UPGRADE(int nod, int left, int right)
{
	if(left == right)
	{
		Graph[nod] = Val ;
		return ;
	}

	int mijloc = (left + right) / 2 ;

	if(mijloc >= Pos) UPGRADE(2 * nod, left, mijloc) ;
	else UPGRADE(2 * nod + 1, mijloc + 1, right) ;

	Graph[nod] = max(Graph[2 * nod], Graph[2 * nod + 1]) ;
}


void DET(int nod, int left, int right)
{
	if(st <= left && dr >= right)
	{
		if(maxim < Graph[nod])
			maxim = Graph[nod] ;
		return ;
	}


	int mijloc = (left + right) / 2 ;

	if(st <= mijloc) DET(2 * nod, left, mijloc) ;
	if(mijloc < dr) DET(2 * nod + 1, mijloc + 1, right) ;
}

int main()
{

	fin >> N >> M ;

	for(int i = 1 ; i <= N ; ++ i)
	{
		int X ;
		fin >> X ;
		Pos = i ;
		Val = X ;
		UPGRADE(1, 1, N) ;
	}


	for(int i = 1 ; i <= M ; ++ i)
	{
		int X ;
		int A,  B ;
		fin >> X ;
		fin >> A >> B ;
		if(X == 1)
		{
			Val = B ;
			Pos = A ;
			UPGRADE(1, 1, N);
		}
		else {
			st = A ;
			dr = B ;
			maxim = -1;
			DET(1, 1, N) ;
			fout << maxim << '\n' ;

		}
	}


	fin.close() ;
	fout.close() ;
	return  0 ;
}