Cod sursa(job #400551)

Utilizator BaduBadu Badu Badu Data 21 februarie 2010 16:50:52
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include<fstream>
#define max 100005

using namespace std; 

int M[18][max];
int V[max],n,m,Log[max];

inline int min(int a, int b){ return a<b?a:b; }

int main(){
	
	ifstream f("rmq.in");
	ofstream g("rmq.out");
	
	int i,j;
	
	f>>n>>m;
	for(i=1;i<=n;i++) f>>V[i];
	for(i=1;i<=n;i++) M[0][i] = V[i];	

	for( i=1; (1<<i) <= n; i++)
		for(j=1;j <= n - ( 1<<i ) + 1 ; j++){
			int  l = 1<<(i-1);
			M[i][j] = min( M[i-1][j],M[i-1][j+l] );
		}
	
	Log[1]=0;
	for(i=2;i<=n;i++)Log[i] = 1+Log[i/2];
	
	while( m-- ){
		f>>i>>j;
		int k = Log[j-i+1];
		g<<min( M[k][i], M[k][j - (1<<k)+1])<<'\n';
	}
		
	return 0;
}