Cod sursa(job #563118)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 24 martie 2011 15:00:20
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <fstream>
using namespace std;

ifstream fi ("rmq.in");
ofstream fo ("rmq.out");

const int DIM = 100005;
const int DIM2 = 18;

int A[DIM], P[DIM][DIM2], D[DIM], N, M;

void prep ()
{
	P[1][0] = A[1];
	for (int i = 2; i <= N; i++)
	{
		D[i] = D[i >> 1] + 1;
		P[i][0] = A[i];
	}
	for (int d = 1, i; d <= N; d++)
		for (i = 1; i + d <= N; i++)
			P[i][d] = min (P[i][d - 1], P[i + d][d - 1]);
}

int main ()
{
	fi >> N >> M;
	for (int i = 1; i <= N; i++)
		fi >> A[i];
	prep ();
	for (int i = 0, a, b, e; i < M; i++)
	{
		fi >> a >> b;
		e = D[b-a+1];
		fo << min (P[a][e], P[b-(1<<e)+1][e]) << '\n';	
	}
	return 0;
}