Cod sursa(job #2787492)

Utilizator Langa_bLanga Radu Langa_b Data 23 octombrie 2021 15:11:08
Problema Range minimum query Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int rmq[100002][30];
int pw[100002];
int main() {
	int n, m;
	cin >> n >> m;
	int put = 0, p = 1;
	for (int i = 1; i <= n; i++) {
		cin >> rmq[i][0];
		if (p * 2 <= i) {
			put++;
			p *= 2;
		}
		pw[i] = put;
	}
	for (int lg = 2, j = 1; lg <= n; lg *= 2, j++) {
		for (int i = 1; i + lg - 1 <= n; i++) {
			rmq[i][j] = min(rmq[i][j - 1], rmq[i + lg / 2][j - 1]);
		}
	}
	while (m != 0) {
		m--;
		int x, y;
		cin >> x >> y;
		int lg = y - x + 1;
		int raspst = rmq[x][pw[y - x + 1]];
		int raspdr = rmq[y - (1 << pw[y - x + 1]) + 1][pw[y - x + 1]];
		cout << min(raspst, raspdr)<<'\n';
	}
}