Cod sursa(job #155888)

Utilizator ProstuStefan-Alexandru Filip Prostu Data 12 martie 2008 11:14:11
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.58 kb
#include <fstream>
#include <algorithm>

using namespace std;

int RMQ[17][1 << 17];

int main(void) {
	ifstream fin("rmq.in");
	ofstream fout("rmq.out");
	int N, M;
	int i, j, a, b, d;

	fin >> N >> M;

	for (i = 1; i <= N; ++i)
		fin >> RMQ[0][i];
	
	for (i = 1; (1 << i) <= N; ++i) {
		d = 1 << (i - 1);
		for (j = 1; j + d + d <= N + 1; ++j)
			RMQ[i][j] = min(RMQ[i-1][j], RMQ[i-1][j+d]);
	}

	for (i = 0; i < M; ++i) {
		fin >> a >> b;
		for (d = b - a + 1, j = -1; d; d >>= 1, ++j);
		fout << min(RMQ[j][a], RMQ[j][b - (1 << j) + 1]) << '\n';
	}

	fin.close();
	fout.close();
	return 0;
}