Cod sursa(job #247714)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 23 ianuarie 2009 19:59:40
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.57 kb
#include <cstdio>
#define l 100010

long a[20][l],v[l],lg[l],n,m,i,j,x,y;

long min(long a, long b)
{
	if (a<b) b=a;
	return b;
}

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]);
	for (i=2; i<=n; i++) lg[i]=lg[i/2]+1;
	for (i=1; i<=lg[n]; i++)
	    for (j=1; j-1+(1<<(i))<=n; 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);
		n=lg[y-x+1];
		printf("%ld\n",min(a[n][x],a[n][y-(1<<n)+1]));
	}
}