Cod sursa(job #1307232)

Utilizator pavlov.ionPavlov Ion pavlov.ion Data 1 ianuarie 2015 18:19:45
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
#include<algorithm>
#define LL long long
#define MAXN 100005
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
LL N,M,op,start,finish;
int A[4*MAXN+100];
int Poz,Val,Max;
void Update(int nod,int st,int dr){
	if(st==dr){
		A[nod]=Val;
		return;
	}
	int mid=(st+dr)/2;
	if(Poz<=mid)
		Update(nod*2,st,mid);
	else
		Update(nod*2+1,mid+1,dr);
   A[nod]=max(A[nod*2],A[nod*2+1]);
}
void Query(int nod,int st,int dr){
	if(start<=st && dr<=finish){
		        Max=max(Max,A[nod]);
				return;
	}
	int div=(st+dr)/2;
	if(start<=div) Query(2*nod,st,div);
	if(div<finish) Query(2*nod+1,div+1,dr);
}
int main(){
	int i,j,a,b,op;
	cin>>N>>M;
	for(i=1;i<=N;i++){
		cin>>Val;
		Poz=i;
		Update(1,1,N);
	}
	while(M--){
		cin>>op>>a>>b;
		if(op==0){
			Max=-1;
			start=a,finish=b;
			Query(1,1,N);
			cout<<Max<<"\n";
		}
		else{
			Poz=a;
			Val=b;
			Update(1,1,N);
		}
	}
return 0;
}