Pagini recente » Cod sursa (job #1391599) | Cod sursa (job #3032888) | Cod sursa (job #2551783) | Cod sursa (job #1406315) | Cod sursa (job #2730823)
#include <iostream>
#include <fstream>
const int NMAX = 1e5;
const int VMAX = 1e5;
const int LOG = 16;
int last_p2[1 + VMAX];
int rmq[1 + NMAX][1 + LOG];
int main() {
std::ifstream in("rmq.in");
std::ofstream out("rmq.out");
int p2 = 0;
for (int i = 1; i <= VMAX; ++i) {
if (1 << (p2 + 1) <= i)
++p2;
last_p2[i] = p2;
}
int n, m;
in >> n >> m;
for (int i = 1; i <= n; ++i)
in >> rmq[i][0];
for (int depth = 1; depth <= LOG; ++depth) {
for (int i = 1; i <= n - (1 << depth) + 1; ++i)
rmq[i][depth] = std::min(rmq[i][depth - 1], rmq[i + (1 << (depth - 1))][depth - 1]);
}
for (int i = 1; i <= m; ++i) {
int left, right;
in >> left >> right;
if (left > right)
std::swap(left, right);
int len = last_p2[right - left];
out << std::min(rmq[left][len], rmq[right - (1 << len) + 1][len]) << '\n';
}
return 0;
}