Pagini recente » Cod sursa (job #1793665) | Cod sursa (job #2462202) | Cod sursa (job #1244383) | Cod sursa (job #1577699) | Cod sursa (job #3312738)
#include <bits/stdc++.h>
using namespace std;
int main() {
#ifndef LOCAL
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N;
int M;
cin >> N >> M;
vector<int> arr(N);
for (int i = 0; i < N; ++i) {
cin >> arr[i];
}
vector<int> lg(N + 1);
lg[1] = 0;
for (int i = 2; i <= N; ++i) {
lg[i] = lg[i >> 1] + 1;
}
vector<vector<int>> rmq(lg[N] + 1, vector<int>(N));
for (int i = 0; i < N; ++i) {
rmq[0][i] = arr[i];
}
for (int b = 1; b <= lg[N]; ++b) {
for (int i = 0; i < N - (1 << b) + 1; ++i) {
rmq[b][i] = min(rmq[b - 1][i], rmq[b - 1][i + (1 << (b - 1))]);
}
}
for (; M--;) {
int X;
int Y;
cin >> X >> Y;
--X;
--Y;
int Z = Y - X + 1;
cout << min(rmq[lg[Z]][X], rmq[lg[Z]][Y - (1 << lg[Z]) + 1]) << "\n";
}
return 0;
}