Cod sursa(job #338958)

Utilizator radu_cppRadu Voroneanu radu_cpp Data 7 august 2009 16:47:25
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <stdio.h>
#include <algorithm>

using namespace std;
long int log[100001];
long int rmq[20][100001];
long int a[100001];
long int i,j,n,l,pas,x,y,t;


int main()
{
	freopen("rmq.in","r",stdin);
	freopen("rmq.out","w",stdout);
	scanf("%ld %ld",&n,&t);
	for (i=1; i<=n; i++)
	{
		scanf("%ld",&a[i]);
		rmq[0][i]=a[i];
	}
	for (i=2; i<=n; i++)
		log[i]=log[i/2]+1;
	for (i=1; (1 << i)<=n; i++)
		for (j=1; j<=n-(1 << i)+1; j++)
			rmq[i][j]= min(rmq[i-1][j], rmq[i-1][j+ (1 << (i-1))]);
	while (t){
		t--;
		scanf("%ld %ld",&x,&y);
		l=log[y-x+1];
		pas=y+1-(1 << l);
		printf("%ld\n",min(rmq[l][x], rmq[l][pas]));
	}
	fclose(stdin); fclose(stdout);
	return 0;
}