Cod sursa(job #811598)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 12 noiembrie 2012 18:29:59
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include<fstream>
#define dim 100007
using  namespace std;


ifstream f("rmq.in");
ofstream g("rmq.out");
inline int min(int a,int b){
	if(a<b)
		return a;
	return b;
}
int rmq[20][dim],i,j,a,b,H;
int n,m,p[dim];
int main () {
	
	f>>n>>m;
	
	
	//rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+1<<(i-1)]);
	for(i=1;i<=n;++i)
		f>>rmq[0][i];
	
	for(i=1;(1<<i)<=n;++i){
		
		for(j=1;j+(1<<i)-1<=n;++j)
			rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+1<<(i-1)]);
	}
	for(i=2;i<=dim;++i)
		p[i]=p[i/2]+1;
	for(i=1;i<=m;++i){
		f>>a>>b;
		H=p[b-a+1];
		g<<min(rmq[H][a],rmq[H][b+1-(1<<H)])<<"\n";
	}
	return 0;
}