Cod sursa(job #2177711)

Utilizator VemorJohn Doe Vemor Data 18 martie 2018 19:32:52
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>

using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");

int N, M, _log2[100003], rm[20][100003];

inline int min(int a, int b) {
	return (a < b ? a : b);
}

int main() {
	_log2[0] = -1;	
	fin >> N >> M;
	for(int i = 1; i <= N; ++i) {
		fin >> rm[0][i];
		_log2[i] = 1 + _log2[i >> 1];
	}

	for (int i = 1; i <= _log2[N]; ++i) {
		for (int j = 1; j <= N - (1 << i) + 1; ++j) {
			rm[i][j] = min(rm[i - 1][j], rm[i - 1][j + (1 << (i-1) ) ]);
		}
	}

	int x, y;
	while (M--) {
		fin >> x >> y;
		int l = _log2[y - x + 1];
		fout << min(rm[l][x], rm[l][y - (1<<(l)) + 1]) << '\n';
	}

	fout.close();
	return 0;

}