Cod sursa(job #156844)

Utilizator razvi9Jurca Razvan razvi9 Data 12 martie 2008 19:26:02
Problema Range minimum query Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.54 kb
#include<cstdio>
using namespace std;
int a[30][100001],i,j,x,y,n,m;
int min(int a,int b){
	if(a<b) return a;
	return b;}
int main()
{
	freopen("rmq.in","r",stdin);
	freopen("rmq.out","w",stdout);
	scanf("%d %d",&n,&m);
	for(i=1;i<=n;i++)
		scanf("%d",&a[0][i]);
	for(i=1;(1<<i)<=n;i++)	
		for(j=1;j <= n-(1<<i)+1;j++)
			a[i][j]=min(a[i-1][j],a[i-1][j+ (1<<(i-1))]);
	for(;m;--m){
		scanf("%d %d",&i,&j);
		x=j-i+1;
		y=1;
		while(x>>y) y++;
		y--;
		printf("%d\n",min(a[y][i],a[y][j-(1<<y)+1]));}
	fclose(stdout);
	return 0;
}