Cod sursa(job #1613373)

Utilizator ArkinyStoica Alex Arkiny Data 25 februarie 2016 12:54:49
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<fstream>
#include<algorithm>
using namespace std;

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

int N, M;

int RMQ[18][100010];

int main()
{
	in >> N >> M;

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

	for (int p = 1; p <= 18; p++)
	{
		int pw2 = (1 << p);
		for (int j = 1; j + pw2 - 1 <= N; ++j)
			RMQ[p][j] = min(RMQ[p - 1][j], RMQ[p - 1][j + pw2 - (pw2>>1)]);
	}

	for (int i = 1; i <= M; ++i)
	{
		int a, b;
		in >> a >> b;
		int dif = b - a + 1;
		int put = 0,pw2;
		while ((1 << put) <= dif)
			++put;
		--put;
		pw2 = (1 << put);
		out << min(RMQ[put][a], RMQ[put][b- pw2+1])<<'\n';
	}



	return 0;
}