Cod sursa(job #986953)

Utilizator veleanduAlex Velea veleandu Data 19 august 2013 20:51:33
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include <cstdio>
#include <algorithm>
using namespace std;

#define max_n 100005 

int RMK[20][max_n];
int n,m,a,b,i,l,d;

int main(){
	freopen("rmq.in","r",stdin);
	freopen("rmq.out","w",stdout);
	scanf("%d %d", &n, &m );
	for ( i=1; i<=n; ++i ){
		scanf("%d", &a );
		RMK[i][0]=a;
	}
	for( l=1; (1<<l) <= n; ++l ){
		for ( i=1; i+(1<<l)-1 <= n; ++i ){
			RMK[i][l]=min( RMK[i][l-1], RMK[ i+(1<<(l-1)) ][l-1] );
		}
	}
	for( ; m; --m ){
		scanf("%d %d", &a, &b );
		d = b-a+1;
		i=0;
		while( (1<<i) <= d )
			++i;
		--i;
		printf("%d\n", min( RMK[ a ][ i ], RMK[ b-(1<<i)+1 ][ i ] ) );
	}
	return 0;
}