Cod sursa(job #336724)

Utilizator crisojogcristian ojog crisojog Data 1 august 2009 12:39:08
Problema Range minimum query Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<stdio.h>
long rmq[18][100010],lg[100010],x,y,i,j,l,h,aux,n,m;
long min(long a, long b)
{
	if(a>b) return b;
	return a;
}
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",&x);
		rmq[0][i]=x;
	}
	lg[1]=0;
    for(i=2;i<=n;i++)
		lg[i]=lg[i/2]+1;
    for(i=1;1<<i<=n;++i)
		for(j=1;j<=n-(1<<i)+1;++j)
        {
			l=1<<(i-1);
			rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+l]);
		}
    for(i=1;i<=m;i++)
    {
		scanf("%ld %ld",&x,&y);
        h=y-x+1;
		l=lg[h];
		aux=h-(1<<l);
		printf("%ld\n",min(rmq[l][x],rmq[l][x+aux]) );
	}   
   return 0;
	
}