Cod sursa(job #326828)

Utilizator vanila_CPPIonescu Victor Cristian vanila_CPP Data 26 iunie 2009 12:17:09
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.52 kb
#include <fstream>
#define min(a,b) a<b?a:b
using namespace std;
int N,M,RMQ[20][100010],i,pw,num,x,y,k;

int main(){
	ifstream fi("rmq.in");
	ofstream fo("rmq.out");
	fi>>N>>M;
	for (i=1;i<=N;++i) fi>>RMQ[0][i];
	for (pw=1,num=2;num<=N;num*=2,++pw)
		for (i=1;i<=N-num+1;++i) RMQ[pw][i]=min(RMQ[pw-1][i],RMQ[pw-1][i+(num/2)]);
	for (i=1;i<=M;++i){
		fi>>x>>y;
		N=y-x+1;
		for (pw=0,num=1;num<=N;num*=2,++pw);
		--pw,num/=2;
		k=min(RMQ[pw][x],RMQ[pw][y-num+1]);
		fo<<k<<"\n";
	}
	fo.close();		
	return 0;
}