Cod sursa(job #343813)

Utilizator digital_phreakMolache Andrei digital_phreak Data 27 august 2009 13:32:42
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAXN 100002
#define MAXLOGN 17

int M[MAXLOGN][MAXN],N,NQ,LG[MAXN];

int min(int x,int y) {return (x<y)?x:y;}

int main() {

	freopen("rmq.in","r",stdin);
	freopen("rmq.out","w",stdout);
	
	scanf("%d%d",&N,&NQ);
	
	int i,j,x,y,k,l,res,diff;
	
	for (i=1;i<=N;++i) scanf("%d",&M[0][i]);
	
	for (i=2;i<=N;++i) LG[i] = LG[i/2]+1;
	
	for (i=1;(1<<i)<=N;++i)
		for (j=1;j<=N-(1<<i)+1;++j) {
			l=1<<(i-1);
			M[i][j] = min(M[i-1][j],M[i-1][j+l]);
	}
			
	for (i=0;i<NQ;++i) {
		scanf("%d%d",&x,&y);
		diff = y-x+1;
		k = LG[diff];
		l = diff-(1<<k);
		res = min(M[k][x],M[k][x+l]);
		printf("%d\n",res);
	}
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}