Cod sursa(job #339787)

Utilizator prdianaProdan Diana prdiana Data 11 august 2009 16:15:32
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <stdio.h>
#define NMAX 100002
#define LOGN 17

int log[NMAX],rmq[LOGN][NMAX];

int min(int v1,int v2)
{
	if (v1<v2)
	{
		return v1;
	}
	return v2;
}

int main()
{
	freopen("rmq.in","r",stdin);
	freopen("rmq.out","w",stdout);
	int i,j,k,m,n,x,y;
	
	scanf("%d%d",&n,&m);
	log[1] = 0;
	for (i=2;i<=n;i++)
	{
		log[i] = log[i/2] + 1; 
	}
	for (i=0;i<n;i++)
	{
		scanf("%d",&rmq[0][i]);
	}

	for (i=1;1<<i<=n;i++)
	{
		for (j=0;j+(1<<i)-1<n;j++)
		{
			rmq[i][j] = min(rmq[i-1][j],rmq[i-1][j+(1<<(i-1))]);
		}
	}
	
	for (i=0;i<m;i++)
	{
		scanf("%d%d",&x,&y);
		k = log[y-x+1];
		printf("%d\n",min(rmq[k][x],rmq[k][y-(1<<k)]));
	}

	return 0;
}