Cod sursa(job #811595)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 12 noiembrie 2012 18:24:49
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 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,v[dim],p[dim];
int main () {
	
	f>>n>>m;
	
	for(i=1;i<=n;++i)
		f>>v[i];
	//rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+1<<(i-1)]);
	for(i=1;i<=n;++i)
		rmq[0][i]=v[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][a+(b-a+1)-(1<<H)])<<"\n";
	}
	return 0;
}