Pagini recente » Cod sursa (job #1976147) | Cod sursa (job #2453893) | Cod sursa (job #2401443) | Cod sursa (job #2112240) | Cod sursa (job #2735369)
#include <fstream>
#include <vector>
#include <string>
#include <climits>
#define mod 666013
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
vector<vector<int>> rmq;
vector<int> lg;
int n, q;
int query(int st, int dr) {
int k = lg[dr - st + 1];
return min(rmq[st][k], rmq[dr - (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));
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]);
}
}
int st, dr;
while (q--) {
cin >> st >> dr;
cout << query(st, dr) << '\n';
}
}