Cod sursa(job #592744)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 30 mai 2011 12:51:44
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.57 kb

#include <cstdio>
#include <fstream>
#include <algorithm>

using namespace std;

int rmq[32][131072],lg[131072];

int main (){
	
	int n,m;
	ifstream in ("rmq.in");
	freopen ("rmq.out","w",stdout);
	in>>n>>m;
	for(int i=1;i<=n;++i)
		in>>rmq[0][i];
	for(int i=2;i<=n;++i)
		lg[i]=lg[i>>1]+1;
	for(int i=1;i<=lg[n];++i)
		for(int j=1;j<=n;++j){
			rmq[i][j]=rmq[i-1][j];
			if(j+(1<<(i-1)<=n))
				rmq[i][j]=min(rmq[i][j],rmq[i-1][j+(1<<(i-1))]);
			}
	for(int x,y;m;--m){
		in>>x>>y;
		printf("%d\n",min(rmq[lg[y-x+1]][x],rmq[lg[y-x+1]][y-(1<<lg[y-x+1])+1]));
		}
	
	return 0;}