Cod sursa(job #416210)

Utilizator otilia_sOtilia Stretcu otilia_s Data 12 martie 2010 12:57:04
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.56 kb
//Range Minimum Query
#include <fstream>
using namespace std;
#define NMAX 100002
int M[NMAX][20];

int main()
{
	ifstream fin("rmq.in"); ofstream fout("rmq.out");
	int N,m,i,j,k;
	fin>>N>>m;
	
	for (i=1;i<=N;++i) 
	 {
		fin>>M[i][0];
	 }
	
	for (j=1; (1<<j) <= N; ++j)
	 for (i=1; i+(1<<j)-1 <=N; ++i)
		M[i][j]=min(M[i][j-1],M[i+(1<<(j-1))][j-1]);		
		
	while (m--)
	{ int x,y;
		fin>>x>>y;
		k=0;
		while ((1<<k)<=y-x+1) ++k;
		--k;
		fout<<min(M[x][k],M[y-(1<<k)+1][k])<<"\n";			
	}
	fin.close(); fout.close();
	return 0;
}