Cod sursa(job #659092)

Utilizator danieladDianu Daniela danielad Data 9 ianuarie 2012 23:57:20
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<iostream>
#include<fstream>
using namespace std;
int n,m,arb[4*100001+66],val,poz,maxim,a,b,op;
ifstream f("arbint.in");
ofstream g("arbint.out");
int max(int x,int y){
	if(x>y)return x;
	return y;
}
void update(int nod,int ls,int ld){
	if(ls==ld){
		arb[nod]=val;
		return;
	}
	int mij=(ls+ld)/2;
	if(poz<=mij)
		update(2*nod,ls,mij);
	else update(2*nod+1,mij+1,ld);
	arb[nod]=max(arb[nod*2],arb[nod*2+1]);
}
void query(int nod,int ls,int ld){
	if(a<=ls&&ld<=b){
		if(maxim<arb[nod])maxim=arb[nod];
		return;
	}
	int mij=(ls+ld)/2;
	if(a<=mij)query(nod*2,ls,mij);
	if(mij<b)query(nod*2+1,mij+1,ld);
}
int main(){
	f>>n>>m;
	int x;
	for(int i=1;i<=n;i++){
		f>>x;
		poz=i;
		val=x;
		update(1,1,n);
	}
	
	for(int i=1;i<=m;i++){
		f>>op>>a>>b;
		if(op==0){
			maxim=-1;
			query(1,1,n);
			g<<maxim<<"\n";
		}
		else{
			poz=a;
			val=b;
			update(1,1,n);
		}
	}
		
	return 0;
}