Cod sursa(job #2501287)

Utilizator mircearoataMircea Roata Palade mircearoata Data 29 noiembrie 2019 13:14:24
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.59 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>

using namespace std;

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

int n, q;
int v[100005];
int rmq[100005][20];

int main()
{
	in >> n >> q;
	for (int i = 1; i <= n; i++)
	{
		in >> v[i];
		rmq[i][0] = v[i];
	}
	for (int l = 1; l < 20; l++)
		for (int i = 1; i <= n - (1 << (l - 1)); i++)
			rmq[i][l] = min(rmq[i][l - 1], rmq[i + (1 << (l - 1))][l - 1]);
	while (q--)
	{
		int x, y;
		in >> x >> y;
		int l = log2(y - x + 1);
		out << min(rmq[x][l], rmq[y - (1 << l) + 1][l]) << '\n';
	}
}