Cod sursa(job #303805)

Utilizator TyberFMI Dogan Adrian Ioan Lucian Tyber Data 10 aprilie 2009 13:41:06
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include<stdio.h>
#include<vector>
using namespace std;
long long a[100][100000],n,m,l[100000],b[100000];
int main(){
	freopen("rmq.in","r",stdin);
	freopen("rmq.out","w",stdout);
	long long i,j,l1;
	scanf("%lld %lld",&n,&m);
	for(i=1;i<=n;i++)
		scanf("%lld",&b[i]);
	l[1]=0;
	for(i=2;i<=n;i++)
		l[i]=l[i/2]+1;
	for(i=1;i<=n;i++)
		a[0][i]=b[i];
	for(i=1;(1<<i)<=n;i++)
		for(j=1;j<=n-(1<<i)+1;j++){
			l1=1<<(i-1);
			a[i][j]=min(a[i-1][j],a[i-1][j+l1]);
		}
	long long x,y,d,s;
	for(i=1;i<=m;i++){
		scanf("%lld %lld",&x,&y);
		d=y-x+1;
		l1=l[d];
		s=d-(1<<l1);
		printf("%lld\n",min(a[l1][x],a[l1][s+x]));
	}
	return 0;
}