Cod sursa(job #184546)

Utilizator h_istvanHevele Istvan h_istvan Data 23 aprilie 2008 20:08:47
Problema Range minimum query Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.65 kb
#include <stdio.h>
#define MAXN 100002
#define MAXL 18

long int n,m,i,j,a,b;
long int rmq[MAXL][MAXN];
int lg[MAXN];

inline long int min(long int a,long int b)
{
	if(a<b) return a;
	return b;
}

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