Cod sursa(job #3312037)

Utilizator mihai.25Calin Mihai mihai.25 Data 25 septembrie 2025 17:40:58
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>

#include <vector>

using namespace std;

ifstream fin ("rmq.in");

ofstream fout ("rmq.out");

int main () {

	int n, m;

	fin >> n >> m;

	vector<vector<int>> rmq (20, vector<int> (n + 1));

	for (int i = 1; i <= n; ++i) {

		int x;

		fin >> x;

		rmq[0][i] = x;
	}

	for (int p = 1; (1 << p) <= n; ++p) {

		for (int i = 1; i <= n; ++i) {

			rmq[p][i] = rmq[p - 1][i];
			
			int j = i + (1 << (p - 1));

			if (j <= n && rmq[p][i] > rmq[p - 1][j])
				rmq[p][i] = rmq[p - 1][j];
		}
	}

	vector<int> e (n + 1);

	for (int i = 2; i <= n; ++i)
		e[i] = 1 + e[i / 2];
	
	for (int i = 1; i <= m; ++i) {

		int st, dr;

		fin >> st >> dr;

		int put = e[dr - st + 1], x = (1 << put);

		fout << min (rmq[put][st], rmq[put][dr - x + 1]) << '\n';
	}

	return 0;
}