Pagini recente » Cod sursa (job #1231518) | Cod sursa (job #579590) | Cod sursa (job #3155177) | Cod sursa (job #1536304) | Cod sursa (job #3030587)
#include <bits/stdc++.h>
using namespace std;
namespace rmq {
namespace {
array<array<int, 100'000>, 21> data;
}
void build (const std::vector<int> &v) {
const int n = v.size() - 1;
for (int j = 1; j <= n; ++ j)
data[0][j] = 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[i][j] = min(data[i - 1][j], data[i - 1][j + half]);
}
}
int query (int left, int right) {
const int level = log2(right - left + 1);
return min(data[level][left], data[level][right - (1 << level) + 1]);
}
}
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';
}
}