Cod sursa(job #2735360)

Utilizator tibinyteCozma Tiberiu-Stefan tibinyte Data 2 aprilie 2021 12:09:20
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <vector>
#include <string>
#define mod 666013
using namespace std;
ifstream cin("geana.in");
ofstream cout("geana.out");
vector<vector<int>> rmq;
vector<int> lg;
int n , q;
int query(int l, int r) {
	int k = lg[r - l + 1];
	return min(rmq[l][k], rmq[r - (1 << k) + 1][k]);
}
int main() {
	cin >> n >> q;
	vector<int> a(n + 1);
	for (int i = 1; i <= n; ++i) {
		cin >> a[i];
	}
	lg = vector<int>(n + 1);
	for (int i = 2; i <= n; ++i) {
		lg[i] = lg[i / 2] + 1;
	}
	rmq = vector<vector<int>>(n + 1, vector<int>(lg[n] + 1 , INT_MAX));
	for (int i = 1; i <= n; ++i) {
		rmq[i][0] = a[i];
	}
	for (int j = 1; j <= lg[n]; ++j) {
		for (int i = 1; i + (1 << j) - 1 <= n; ++i) {
			rmq[i][j] = min(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
		}
	}
	while (q--) {
		int st, dr;
		cin >> st >> dr;
		cout << query(st, dr) << '\n';
	}
}