Cod sursa(job #563858)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 26 martie 2011 10:59:33
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
# include <stdio.h>
using namespace std;
int a[20][100005],lg[100005],x,y,d,q,n,m,i,j,k,w;

inline 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 ("%i%i",&n,&m);
	for (i=1;i<=n;i++)
		scanf ("%i",&a[0][i]);
	
	for (i=2;i<=n;i++)
		lg[i]=lg[i/2]+1;
	
	for (j=1;j<=lg[n];j++)
		for (i=1;(k=i+(1<<j-1))<=n;i++)
			a[j][i]=min (a[j-1][i],a[j-1][k]);
		
		for (i=1;i<=m;i++)
		{
			scanf ("%i%i",&x,&y);
			q=lg[y-x+1];
			printf ("%i\n",min (a[q][x],a[q][(y-(1<<q))+1]));
		}
		
		return 0;
}