Cod sursa(job #1307233)

Utilizator pavlov.ionPavlov Ion pavlov.ion Data 1 ianuarie 2015 18:20:04
Problema Range minimum query Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
#include<algorithm>
#define LL long int
#define MAXN 100005
#define INF 10000000
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
LL N,M,start,finish;
int A[4*MAXN+100];
int Poz,Val,Min;
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]=min(A[nod*2],A[nod*2+1]);
}
void Query(int nod,int st,int dr){
	if(start<=st && dr<=finish)
		        Min=min(Min,A[nod]);
	 else{
	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,a,b;
	cin>>N>>M;
	for(i=1;i<=N;i++){
		cin>>Val;
		Poz=i;
		Update(1,1,N);
	}
	while(M--){
		cin>>a>>b;
			Min=INF;
			start=a,finish=b;
			Query(1,1,N);
			cout<<Min<<"\n";
	}
return 0;
}