Cod sursa(job #1040173)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 24 noiembrie 2013 00:39:30
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<fstream>
#define dim 100007

using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");
int arb[3*dim],n,i,a,b,op,val,pos,m,maxim,t,q,v[dim];
inline int maxu(int a,int b){
	if(a<b)
		return b;
	return a;
}
void update(int nod,int st,int dr) {
	if(st==dr){
		arb[nod]=v[pos];
		return ;
	}
	else {
		int mid=st+(dr-st)/2;
		
		if(pos<=mid)
			update(2*nod,st,mid);
		else
			update(2*nod+1,mid+1,dr);
	}
	arb[nod]=maxu(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>>m;
	
	for(i=1;i<=n;++i) {
		f>>v[i];
		pos=i;
		update(1,1,n);
	}
	
	for(i=1;i<=m;++i){
		f>>op>>a>>b;
		
		if(!op){
			maxim=-1;
			query(1,1,n);
			g<<maxim<<"\n";
		}
		else{
			v[a]=b;
			pos=a;
			update(1,1,n);
		}
	}
	
	
	return 0;
}