Cod sursa(job #432260)

Utilizator ironhideAfterBurner ironhide Data 2 aprilie 2010 00:11:32
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.56 kb
#include <stdio.h>

long min(long x,long y)
{
	if(x<y) return x;
	else return y;
}

long M,N,P,x,y,A[20][100002],i,j;

int main()
{
	freopen("rmq.in","r",stdin);
	freopen("rmq.out","w",stdout);
	scanf("%ld%ld",&N,&M);
	for(i=1;i<=N;i++) scanf("%ld",&A[0][i]);
	P=0;
	while(1<<P<=N) P++;
	P--;
	for(i=1;i<=P;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(i=1;i<=M;i++)
	{
		scanf("%ld%ld",&x,&y);
		P=0;
		while((1<<P)<=y-x+1) P++;
		P--;
		printf("%ld\n",min(A[P][x],A[P][y+1-(1<<P)]));
	}
	return 0;
}