Pagini recente » Cod sursa (job #834069) | Cod sursa (job #730609) | Cod sursa (job #1856855) | Cod sursa (job #3336136) | Cod sursa (job #3301464)
#include <iostream>
#include <vector>
using namespace std;
int get_RMQ(int left, int right, vector<vector<int>> &RMQ) {
int len = right - left + 1;
int log = 31 - __builtin_clz(len);
return min(RMQ[left][log], RMQ[right-(1<<log)+1][log]);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int N,Q;
cin >> N >> Q;
vector<int> arr(N+1);
int log = 31 - __builtin_clz(N);
vector<vector<int>> RMQ(N+1, vector<int>(log+1));
for (int i=1; i<=N; i++) {
cin >> arr[i];
RMQ[i][0] = arr[i];
}
for (int pow=1; pow<=log; pow++) {
for (int i=1; i+(1<<pow)-1 <= N; i++) {
RMQ[i][pow] = min(RMQ[i][pow-1], RMQ[i+(1<<(pow-1))][pow-1]);
}
}
for (int i=1; i<=Q; i++) {
int left, right;
cin >> left >> right;
cout << get_RMQ(left, right, RMQ) << "\n";
}
return 0;
}