Cod sursa(job #1229684)

Utilizator mihaimusatMihai Musat mihaimusat Data 17 septembrie 2014 22:17:53
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include <cstdio>
#include <algorithm>
#define N 100001

using namespace std;

int rmq[20][N], lg[N];
int n, m, i, k, l, x, y;

int main()
{
	freopen("rmq.in", "r", stdin);
	freopen("rmq.out", "w", stdout);
	scanf("%d%d%d", &n, &m, &rmq[0][1]);
	for(i=2;i<=n;i++)
	{
		lg[i]=lg[i>>1]+1;
		scanf("%d", &rmq[0][i]);
	}
	for(k=1;(1<<k)<=n;k++)
	{
		for(i=1;i+(1<<k)-1<=n;i++)
		{
			l=1<<(k-1);
			rmq[k][i]=min(rmq[k-1][i], rmq[k-1][i+l]);
		}
	}
	for(;m;m--)
	{
		scanf("%d%d", &x, &y);
		l=lg[y-x+1];
		y=y-x+1-(1<<l);
		printf("%d\n", min(rmq[l][x], rmq[l][x+y]));
	}
}