Pagini recente » Cod sursa (job #3280645) | Cod sursa (job #2197024) | Cod sursa (job #3033150) | Cod sursa (job #2965732) | Cod sursa (job #3242807)
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
using i3 = int32_t;
using i64 = int64_t;
int lg[100002];
class rmq {
private:
int rq[18][100002];
public:
rmq(int n, vector<int>& v) {
for (int i = 1; i <= n; i++) {
if (i > 1) {
lg[i] = lg[i / 2] + 1;
} else {
lg[i] = 0;
}
rq[0][i] = v[i];
}
lg[n] = lg[n / 2] + 1;
for (int i = 1; (1 << i) <= n; i++) {
for (int j = 1; j <= n - (1 << i) + 1; j++) {
rq[i][j] = min(rq[i - 1][j], rq[i - 1][j + (1 << (i - 1))]);
}
}
}
int query(int l, int r) {
return min(rq[lg[l]][l], rq[lg[l]][r - (1 << lg[l]) + 1]);
}
};
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// #ifdef LOCAL
// ifstream cin{"input.txt"};
// ofstream cout{"output.txt"};
// #endif
ifstream cin{"rmq.in"};
ofstream cout{"rmq.out"};
int n, m;
cin >> n >> m;
vector<int> v(n + 1);
for (int i = 1; i <= n; i++) {
cin >> v[i];
}
rmq rq(n, v);
int l, r;
for (int i = 0; i < m; i++) {
cin >> l >> r;
cout << rq.query(l, r) << endl;
}
return 0;
}