Cod sursa(job #613991)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 5 octombrie 2011 12:30:58
Problema Range minimum query Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include <cstdio>
#include <fstream>
#include <algorithm>

using namespace std;

#define N 100001

int rmq[18][N],lg[N];

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