Cod sursa(job #361008)

Utilizator proflaurianPanaete Adrian proflaurian Data 3 noiembrie 2009 12:03:20
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<stdio.h>
inline int Min(int x,int y){return x<y?x:y;}
int n,m,i,A,B,E,L,P,U,M,a[17][100000];
void read(),solve();
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	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]);
}
void solve()
{
	L=1;i=0;
	for(;;)
	{
		if(L<<1>n)break;
		M=L;L<<=1;P=1;U=L;E++;
		for(;U<=n;P++,M++,U++)
			a[E][P]=Min(a[E-1][P],a[E-1][M+1]);
	}
	for(;m;m--)
	{
		scanf("%d%d",&A,&B);
		L=1;
		i=0;
		for(;;)
		{
			if((L<<1)>B-A+1)
				break;
			i++;
			L<<=1;
		}
		printf("%d\n",Min(a[i][A],a[i][B-L+1]));
	}
}