Cod sursa(job #334496)

Utilizator szabotamasSzabo Tamas szabotamas Data 27 iulie 2009 03:00:49
Problema Range minimum query Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>

using namespace std;
#define nr 100002
#define NMAX 100002
#define MMAX 1000002
long X,i,n,m,I,J,a[NMAX],t[MMAX];

void build(long k, long beg, long end){
	if(beg==end){
		t[k]=a[beg];
		return;
	}
	else {
		build(k*2,beg,(beg+end)/2);
		build(k*2+1,(beg+end)/2+1,end);
	}
	if(t[k*2]<=t[k*2+1])
		t[k]=t[k*2];
	else
		t[k]=t[k*2+1];
}
	
long minim(long k, long beg, long end){
	long x,y;
	if (J<beg || I>end)
		return nr;
	if (I<=beg && J>=end)
		return t[k];
	x=minim(k*2,beg,(beg+end)/2);
	y=minim(k*2+1,(beg+end)/2+1,end);
	if(x<=y)
		return x;
	else
		return y;
}

int main(){
	
	ifstream fin("rmq.in");
		fin >> n >> m;
		for (i=1; i<=n; i++){
			fin >> a[i];
		}
		build(1,1,n);
	ofstream fout("rmq.out");
		for (i=1; i<=m; i++){
			fin >> I >> J;
			fout << minim(1,1,n) << "\n";
		}
	fin.close();
	fout.close();
	return 0;
}