Cod sursa(job #492181)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 13 octombrie 2010 18:07:18
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb

#include<cstdio>
#include<fstream>

using namespace std;

#define nn 100001

int arb[nn];
int n,m,x,st,t;

 inline int comp (int x,int y){
	
	return x < y ? y : x;
	
	}

void upd (int nod,int ft,int bk){
	
	if(ft==bk)
	arb[nod]=x;
	else{
		int mj=(ft+bk)>>1;
		if(mj>=st)
		upd((nod<<1),ft,mj);
		else
		upd((nod<<1)+1,mj+1,bk);
		arb[nod] = comp (arb[nod<<1],arb[(nod<<1)+1]);
		}
	
	}
	
	int que (int nod,int ft,int bk){
		
		if(ft>=st && bk<=x)
		return arb[nod];
		else{
			int mj=(ft+bk)>>1,m1=-1,m2=-1;
			if(mj>=st)
			m1 = que ((nod<<1),ft,mj);
			if(mj<x)
			m2 = que ((nod<<1)+1,mj+1,bk);
			return comp (m1,m2);
			}
		
		}

int main ()
{
	
	ifstream in ("arbint.in");
	in>>n>>m;
	for(int i=1;i<=n;++i){
		in>>x;
		st=i;
		upd(1,1,n);
		}
		freopen("arbint.out","w",stdout);
		for(;m;--m){
			in>>t>>st>>x;
			switch (t){
			case 1:
			upd(1,1,n);
			break;
			case 0:
			printf("%d\n",que(1,1,n));
			break;
		}
			}
			in.close ();
	
	return 0;}