Cod sursa(job #595863)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 14 iunie 2011 17:58:11
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include <fstream>

using namespace std;

ifstream in("rmq.in");
ofstream out("rmq.out");

const int N=100002;
const int M=18;

int a[M][N],lg[N];

int min(int x, int y){
	if(x<y)
		return x;
	return y;
}

int main(){
	int i,j,x,y,dif,l,n,m,aux;
	in>>n>>m;
	for(i=1;i<=n;i++){
		in>>a[0][i];
	}
	lg[1]=0;
	for(i=2;i<=n;i++){
		lg[i]=lg[i/2]+1;
	}
	for(i=1;(1<<i)<=n;i++){
		for(j=1;j<=n-(1<<i)+1;j++){
			a[i][j]=min(a[i-1][j],a[i-1][j+(1<<i-1)]);
		}
	}
	for(i=1;i<=m;i++){
		in>>x>>y;
		dif=y-x+1;
		l=lg[dif];
		aux=dif-1<<l;
		out<<min(a[l][x],a[l][y+1-(1<<l)])<<"\n";
	}
	return 0;
}