Cod sursa(job #615224)

Utilizator moonbeamElma Moonbeam moonbeam Data 8 octombrie 2011 22:29:57
Problema Range minimum query Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include<cstdio>
#define NMAX 100005
#define sh short int
#define minn(a,b) ((a<b)?a:b)
sh log[NMAX];
int a[18][NMAX],lung,jum,x,y,N,M,lo;
int main()
{
	freopen("rmq.in","r",stdin);
	freopen("rmq.out","w",stdout);
	scanf("%d%d",&N,&M);
	for (int i=1; i<=N; ++i)
	{
		scanf("%d",&a[0][i]);
		if (i>1)
			log[i]=log[i>>1]+1;
	}
	for (int i=1; i<=log[N]; ++i)
	{
		lung=(1<<i);
		jum=lung>>1;
		for (int j=1; j+lung-1<=N; ++j)
			a[i][j]=minn(a[i-1][j],a[i-1][j+jum]);
	}
	for (int i=1; i<=M; ++i)
	{
		scanf("%d%d",&x,&y);
		lung=1<<log[y-x+1];
		lo=log[lung];
		printf("%d\n",minn(a[lo][x],a[lo][y-lung+1]));
	}
	return 0;
}