Cod sursa(job #718648)

Utilizator psycho21rAbabab psycho21r Data 20 martie 2012 22:42:42
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 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;
	
	for(int i = 1; i <= N; ++i)
		in >> m[i][0];
	
	p_prev[1] = 0;	
	for(int i = 2; i <= N; ++i)
		p_prev[i] = p_prev[i/2] + 1;
	
	for(int j = 1; (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]);
		
	ofstream out("rmq.out");
	
	for(int i = 1, a, b, k; i <= M; ++i)
	{
		in >> a >> b;
		k = p_prev[b - a + 1];
		out << (min(m[a][k], m[b - (1 << k) + 1][k])) << "\n";
	}
	in.close();
	out.close();
	return 0;
}