Pagini recente » Cod sursa (job #1849680) | Cod sursa (job #923866) | Cod sursa (job #1236087) | Cod sursa (job #512331) | Cod sursa (job #1743592)
#include <fstream>
#include <cstring>
using namespace std;
constexpr int kMaxN = 100000;
int rmq[18][kMaxN];
int lg[kMaxN + 1];
int main() {
ifstream cin("rmq.in");
ofstream cout("rmq.out");
cin.tie(0);
ios_base::sync_with_stdio(false);
int N, M; cin >> N >> M;
for (int i = 0; i < N; i += 1) {
cin >> rmq[0][i];
}
lg[1] = 0;
for (int i = 2; i <= N; i += 1) {
lg[i] = lg[i >> 1] + 1;
}
for (int i = 1; (1 << i) < N; i += 1) {
for (int j = 0; j + (1 << i) <= N; j += 1) {
if (rmq[i - 1][j] < rmq[i - 1][j + (1 << (i - 1))]) {
rmq[i][j] = rmq[i - 1][j];
} else {
rmq[i][j] = rmq[i - 1][j + (1 << (i - 1))];
}
}
}
for (int i = 0; i < M; i += 1) {
int x, y; cin >> x >> y;
x--; y--;
const int query_log = lg[y - x + 1];
cout << (rmq[query_log][x] < rmq[query_log][y - (1 << query_log) + 1] ?
rmq[query_log][x] : rmq[query_log][y - (1 << query_log) + 1]) << '\n';
}
return 0;
}