Pagini recente » Cod sursa (job #716893) | Cod sursa (job #138485) | Cod sursa (job #1596200) | Cod sursa (job #965731) | Cod sursa (job #3030589)
#include <bits/stdc++.h>
using namespace std;
namespace rmq {
namespace {
array<array<int, 21>, 100'000> data;
}
void build (const std::vector<int> &v) {
const int n = v.size() - 1;
for (int j = 1; j <= n; ++ j)
data[j][0] = v[j];
for (int i = 1, step = 1 << i; step <= n; ++ i, step <<= 1) {
const int half = step >> 1;
for (int j = 1; j + step - 1 <= n; ++ j)
data[j][i] = min(data[j][i - 1], data[j + half][i - 1]);
}
}
int query (int left, int right) {
const int level = log2(right - left + 1);
return min(data[left][level], data[right - (1 << level) + 1][level]);
}
}
int main () {
ifstream in("rmq.in");
in.exceptions(in.failbit);
ofstream out("rmq.out");
out.exceptions(out.failbit);
int n, m;
in >> n >> m;
vector<int> v(n + 1);
for (int i = 1; i <= n; ++ i)
in >> v[i];
rmq::build(v);
for (int i = 0; i < m; ++ i) {
int x, y;
in >> x >> y;
out << rmq::query(x, y) << '\n';
}
}