Cod sursa(job #151694)

Utilizator devilkindSavin Tiberiu devilkind Data 8 martie 2008 15:27:33
Problema Range minimum query Scor Ascuns
Compilator cpp Status done
Runda Marime 0.76 kb
#include <stdio.h>
#include <vector>

using namespace std;

#define NMAX 100002
#define INF 0x3f3f3f3f

long int a[NMAX],sq[NMAX];
long int rt;
long int n,m;

int main()
{
	freopen("rmq.in","r",stdin);
	freopen("rmq.out","w",stdout);

	long int i,j,x,y,ls,ld;

	scanf("%ld %ld",&n,&m);

	for (i=1;i<=n;i++)
		scanf("%ld",&a[i]);

	for (rt=0;rt*rt<=n;rt++);
	rt--;

	for (i=1;rt*i<=n;i++)
		{
		sq[i]=INF;
		for (j=rt*(i-1)+1;j<=rt*i;j++)
			sq[i]=min(sq[i],a[j]);
		}

	for (i=1;i<=m;i++)
	{
		long int mn;
		mn=INF;
		scanf("%ld %ld",&x,&y);
		for (j=1;rt*j<x;j++);
		j++;
		ls=min(rt*(j-1),y);
		for (;rt*j<=y;j++)
			mn=min(mn,sq[j]);
		ld=max(rt*(j-1),x);

		for (j=x;j<=ls;j++)
			mn=min(mn,a[j]);
		for (j=ld;j<=y;j++)
			mn=min(mn,a[j]);
		printf("%ld\n",mn);
	}
	return 0;
}