Cod sursa(job #432746)

Utilizator NemultumituMatei Ionita Nemultumitu Data 2 aprilie 2010 18:08:17
Problema Range minimum query Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.58 kb
#include <cstdio>
int n,m;
int prep[20][100010];

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 (int i=1;i<=n;++i)
		scanf("%d",&prep[0][i]);
	for (int j=1;1<<j<=n;++j)
		for (int i=1;i+(1<<j)-1<=n;++i)
			prep[j][i]=min(prep[j-1][i],prep[j-1][i+(1<<j-1)]);
	int st,dr,i;
	while (m--)
	{
		scanf("%d%d",&st,&dr);
		int k=0;
		while(1<<k<dr-st+1)
			++k;
		--k;
		i=min(prep[k][st],prep[k][dr-(1<<k)+1]);
		printf("%d\n",i);
	}
	return 0;
}