Cod sursa(job #3353790)

Utilizator Alexutu008Ionita Alexandru-Dumitru Alexutu008 Data 11 mai 2026 15:59:04
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <bits/stdc++.h>

using namespace std;

const int K = 20, N = 1e5 + 1;

int rmq[K][N]; // rmq[k][l] -> min pe [l, l+2**k)
int n, m, l, r;
int lg[N];

int main() {
	freopen("rmq.in", "r", stdin);
	freopen("rmq.out", "w", stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);

	cin >> n >> m;

	for (int i = 1; i <= n; ++i) cin >> rmq[0][i];
	for (int p = 1; p < K; ++p) {
		for (int i = 1; i <= n - (1 << p) + 1; ++i) {
			rmq[p][i] = min(rmq[p - 1][i], rmq[p - 1][i + (1 << (p - 1))]);
		}
	}

	for (int i = 2; i < N; ++i) lg[i] = lg[i / 2] + 1;

	while (m--) {
		cin >> l >> r;

		int k = lg[r - l + 1];
		cout << min(rmq[k][l], rmq[k][r - (1 << k) + 1]) << '\n';
		//cout << k << ' ';
	}

	return 0;
}