Cod sursa(job #563804)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 26 martie 2011 01:36:19
Problema Range minimum query Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
# include <stdio.h>
using namespace std;
int a[100005][20],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[i][0]);
	
	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[i][j]=min (a[i][j-1],a[k][j-1]);
		
		for (i=1;i<=m;i++)
		{
			scanf ("%i%i",&x,&y);
			q=lg[y-x+1];
			printf ("%i\n",min (a[x][q],a[(y-(1<<q))+1][q]));
		}
		
		return 0;
}