Pagini recente » Cod sursa (job #2824841) | Cod sursa (job #1752439) | Cod sursa (job #2926074) | Cod sursa (job #1080360) | Cod sursa (job #3299528)
#include <fstream>
#include <vector>
#include <climits>
#define fastio ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int LOG = 20;
int main() {
int n, q;
cin >> n >> q;
vector<vector<int>> up(n + 1, vector<int>(LOG, INT_MAX));
vector<int> llog(n + 1);
for (int i = 1; i <= n; i++) {
cin >> up[i][0];
}
auto preprocess = [&]() -> void {
llog[1] = 0;
for (int i = 2; i <= n; i++) {
llog[i] = llog[i / 2] + 1;
}
for (int j = 1; j < LOG; j++) {
for (int i = 1; i + (1 << j) - 1 <= n; i++) {
up[i][j] = min(up[i][j - 1], up[i + (1 << (j - 1))][j - 1]);
}
}
};
preprocess();
auto query = [&](int a, int b) -> int {
int len = b - a + 1;
int k = llog[len];
return min(up[a][k], up[b - (1 << k) + 1][k]);
};
while (q--) {
int a, b;
cin >> a >> b;
cout << query(a, b) << '\n';
}
return 0;
}