Cod sursa(job #563802)

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