Cod sursa(job #700341)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 1 martie 2012 09:39:30
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<fstream>
#define dim 100002

using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");

int arb[2*dim],n,i,a,b,op,val,pos,maxim,t,q,v[dim];
inline int max(int a,int b){
	if(a<b)
		return b;
	return a;
}
void update(int nod,int st ,int dr){
	if(st==dr){
		arb[nod]=val;
		return ;
	}
	int mij=(st+dr)/2;
	if(pos<=mij)
		update(2*nod,st,mij);
	else
		update(2*nod+1,mij+1,dr);
	arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
void query(int nod,int st,int dr){
	if(a<=st && b>=dr){
		if(arb[nod]>maxim)
			maxim=arb[nod];
	}
	else{
		int mij=(st+dr)/2;
		if(a<=mij)
			query(2*nod,st,mij);
		if(b>mij)
			query(2*nod+1,mij+1,dr);
	}
}
int main (){
	f>>n>>q;
	
	for(i=1;i<=n;i++){
		f>>v[i];
		pos=i;
		val=v[i];
		update(1,1,n);
	}
	
	for(i=1;i<=q;i++){
		f>>t>>a>>b;
		if(t==0){
			maxim=-1;
			query(1,1,n);
			g<<maxim<<"\n";
		}
		else{
			val==v[b];
			pos=a;
			update(1,1,n);
		}
	}
	return  0;
}