Cod sursa(job #3240604)

Utilizator EricDimiericdc EricDimi Data 18 august 2024 18:42:50
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.69 kb
#include <iostream>
#include <fstream>

std::ifstream f("rmq.in");
std::ofstream g("rmq.out");

const int NMAX = 1e5, LOGMAX = 17;
int N, Q, x, y;
int r[LOGMAX + 1][NMAX + 1];
int log2[NMAX + 1];

int main()
{
	f >> N >> Q;
	for (int i = 2; i <= N; i++)
		log2[i] = log2[i / 2] + 1;
	for (int i = 1; i <= N; i++)
		f >> r[0][i];
	for (int p = 1; (1 << p) <= N; p++)
		for (int i = 1; i <= N; i++)
		{
			int j = i + (1 << (p - 1));
			r[p][i] = r[p - 1][i];
			if (j <= N)
				r[p][i] = std::min(r[p][i], r[p - 1][j]);
		}
	while (Q--)
	{
		f >> x >> y;
		int L = y - x + 1, k = log2[L], len = (1 << k);
		g << std::min(r[k][x], r[k][y - len + 1]) << '\n';
	}
	f.close();
	g.close();
    return 0;
}