Cod sursa(job #718401)

Utilizator psycho21rAbabab psycho21r Data 20 martie 2012 19:30:00
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <fstream>
#include <vector>
using namespace std;
int N, M, m[100000][18], p_prev[100000];
int main()
{
	ifstream in("rmq.in");
	in >> N >> M;
	vector<int> a(N + 1);
	for(int i = 0; i < N; ++i)
		in >> m[i][0];
	for(int j = 1; j < N; ++j)
		for(int i = 0; i + (1 << j) - 1 < N; ++i)
			m[i][j] = min(m[i][j - 1], m[i + (1 << (j - 1))][j - 1]);
	for(int i = 2; i < N; ++i)
		p_prev[i] = p_prev[i/2];
	ofstream out("rmq.out");
	for(int i = 0, a, b; i < M; ++i)
	{
		in >> a >> b;
		--a;
		--b;
		out << min(m[a][p_prev[b - a + 1]], m[b - (1 << p_prev[b - a + 1]) + 1][p_prev[b - a + 1]]) << "\n";
	}
	in.close();
	out.close();
	return 0;
}