Cod sursa(job #1987236)

Utilizator ArkinyStoica Alex Arkiny Data 29 mai 2017 23:31:18
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;

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

int RMQ[20][100010], p[100010], N, Q;


int main()
{
	in >> N >> Q;
	for (int i = 1; i <= N; ++i)
		in >> RMQ[0][i];

	for (int i = 2; i <= N; ++i)
		p[i] = 1 + p[i / 2];

	for (int i = 1; i <= p[N]; ++i)
		for (int j = 1; (j + (1 << i) - 1) <= N; ++j)
			RMQ[i][j] = min(RMQ[i - 1][j], RMQ[i - 1][j + (1 << (i - 1))]);

	for (int i = 1; i <= Q; ++i)
	{
		int x, y;

		in >> x >> y;

		out << min(RMQ[p[y - x + 1]][x], RMQ[p[y - x + 1]][y - (1 << p[y - x + 1]) + 1]) << '\n';
	}


	return 0;


}