Cod sursa(job #2803788)

Utilizator sireanu_vladSireanu Vlad sireanu_vlad Data 20 noiembrie 2021 14:10:41
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.61 kb
#include <fstream>
using namespace std;

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

int n, m, rmq[17][100001], Log2[100001];

void read()
{
	in >> n >> m;
	for(int i = 1; i <= n; ++i)
		in >> rmq[0][i];
}

void pre()
{
	for(int i = 2; i <= n; ++i)
		Log2[i] = Log2[i/2] + 1;

	for(int i = 1; (1<<i) <= n; ++i)
		for(int j = 1; j <= n - (1<<i) + 1; ++j)
			rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j + (1<<(i-1))]);
}

int main()
{
	read();
	pre();
	int x, y, k;
	while(m--)
	{
		in >> x >> y;
		k = Log2[y-x+1];
		out << min(rmq[k][x], rmq[k][y - (1<<k) + 1]) << '\n';
	}
	return 0;
}