Cod sursa(job #2262927)

Utilizator b10nd3Oana Mancu b10nd3 Data 17 octombrie 2018 22:20:06
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.65 kb
#include<iostream>
#include<fstream>

using namespace std;

#define nMAX 100005
#define iMAX 18

int rmq[iMAX][nMAX], lg[nMAX];

int main(){
  	ifstream in("rmq.in"); ofstream out("rmq.out");
    int i, n, m, x, y;
	in>>n>>m; 	
	
	lg[1]=0;
	
	for(i=1;i<=n;i++){
		in>>rmq[0][i];
		if(i!=1) lg[i]=lg[i/2]+1;
	}
	
	for(i=1;(1<<i)<=n;i++)
	   for(int j=1;j<=n-(1<<i)+1;j++){
	   	 rmq[i][j]=min( rmq[i-1][j] , rmq[i-1][ j + ( 1<<(i-1) )] ); 
	   }
	
	for(i=1; i<=m; i++){
		in>>x>>y;
		int dif=y-x+1;
		out<<min(rmq[lg[dif]][x] , rmq[ lg[dif] ][ x + ( dif- (1<<lg[dif]) )  ] )<<'\n';
	}
	
	in.close(); out.close();
	return 0;
}