Cod sursa(job #527213)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 30 ianuarie 2011 22:34:09
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include <cstdio>

#define file_in "rmq.in"
#define file_out "rmq.out"

int N,M;
int a[20][101000];
int l[101000];
int x,y;
int i,j;

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

int main(){
	
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d", &N, &M);
	
	for (i=1;i<=N;++i)
		 scanf("%d", &a[0][i]);
	
	l[1]=0;
	for (i=2;i<=N;++i)
		 l[i]=l[i/2]+1;
	for (j=1;(1<<j)<=N;++j)
		 for (i=1;i+(1<<j)-1<=N;++i)
			  a[j][i]=min(a[j-1][i],a[j-1][i+(1<<(j-1))]);
	while(M--){
		scanf("%d %d", &x, &y);
		printf("%d\n",min(a[l[y-x+1]][x],a[l[y-x+1]][y-(1<<l[y-x+1])+1])); 
	}
	
	return 0;
	
}