Cod sursa(job #416180)

Utilizator otilia_sOtilia Stretcu otilia_s Data 12 martie 2010 12:34:01
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
//Range Minimum Query
#include <fstream>
using namespace std;
#define NMAX 100002
int A[NMAX],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>>A[i];
		M[i][0]=i;
	 }
	
	for (j=1; 1<<j <= N; ++j)
	 for (i=1; i+(1<<j)-1 <=N; ++i)
		if (A[M[i][j-1]] < A[M[i+(1<<(j-1))][j-1]])
			 M[i][j]=M[i][j-1];
		else M[i][j]=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;
		if (A[M[x][k]]<A[M[y-(1<<k)+1][k]])  fout<<A[M[x][k]]<<"\n";
			else fout<<A[M[y-(1<<k)+1][k]]<<"\n";
	}
	fin.close(); fout.close();
	return 0;
}