Cod sursa(job #769476)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 19 iulie 2012 15:23:19
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.57 kb
#include<fstream>
#define dim 100005
using namespace std;

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