Cod sursa(job #2757963)

Utilizator stevejobsMihail Popescu stevejobs Data 7 iunie 2021 20:09:49
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.67 kb

#include <iostream>
#include <fstream>

int table[100001][17], n,m;
int logaritm[100001];

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

int main()
{
	f >> n >> m;
	for (int i = 1; i <= n; ++i)
		f >> table[i][0];

	logaritm[1] = 0;
	for (int i = 2; i <= n; ++i)
		logaritm[i] = 1 + logaritm[i / 2];

	for (int j = 1; j <= logaritm[n]; ++j)
		for (int i = 1; i + (1 << j) - 1 <= n; ++i)
			table[i][j] = std::min(table[i][j - 1], table[i + (1 << (j - 1))][j - 1]);

	int x, y, len;

	for (int i = 0; i < m; ++i)
	{
		
		f >> x >> y;
		len = logaritm[y - x + 1];
		g << std::min(table[x][len], table[y - (1 << len) + 1][len]) << '\n';
	}
	
}