Cod sursa(job #2724036)

Utilizator Rares31100Popa Rares Rares31100 Data 16 martie 2021 11:45:44
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
#include <cmath>

std::ifstream fin("rmq.in");
std::ofstream fout("rmq.out");
int *rmq[17];
int n, q;

int minim(int st, int dr)
{
	int i = (int)log2(dr - st + 1);
	return std::min(rmq[i][st], rmq[i][dr - (1 << i) + 1]);
}

int main()
{
	fin >> n >> q;

	for(int i = 0; i <= 16 && n - (1 << i) + 1 > 0; i++)
		rmq[i] = new int[n - (1 << i) + 2];

	for(int j = 1; j <= n; j++)
		fin >> rmq[0][j];

	for(int i = 1, maxI = (int)log2(n), l = 1; i <= maxI; i++, l *= 2)
		for(int j = 1; j <= n - l * 2 + 1; j++)
			rmq[i][j] = std::min(rmq[i - 1][j], rmq[i - 1][j + l]);

	for(int k = 1, st, dr; k <= q; k++)
	{
		fin >> st >> dr;
		fout << minim(st, dr) << '\n';
	}

	return 0;
}