Cod sursa(job #936658)

Utilizator forgetHow Si Yu forget Data 8 aprilie 2013 07:13:17
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.55 kb
#include <fstream>
using namespace std;

int main() {
	ifstream fin("rmq.in");
	ofstream fout("rmq.out");
	int n, m;
	fin >> n >> m;

	int lg = 1;
	for (int i = 1; i < n; i *= 2)
		++lg;
	int a[lg][n+1];
	for (int i = 1; i <= n; ++i)
		fin >> a[0][i];
	for (int i = 1, stp = 1; i < lg; ++i, stp *= 2)
		for (int j = n-2*stp+1; j > 0; --j)
			a[i][j] = min(a[i-1][j], a[i-1][j+stp]);

	int b, c, len, i;
	for (; m > 0; --m) {
		fin >> b >> c;
		len = c-b;
		for (i = 0; len > 1; len /= 2) ++i;
		fout << min(a[i][b], a[i][c-(1<<i)+1]) << '\n';
	}
	return 0;
}