Pagini recente » Cod sursa (job #1402763) | Cod sursa (job #3221833) | Cod sursa (job #1365276) | Cod sursa (job #1460312) | Cod sursa (job #2902125)
#include <fstream>
#include <vector>
int main() {
std::ifstream ifs("rmq.in");
int n, m;
ifs >> n >> m;
std::vector<int> log2_table(n + 1);
log2_table[1] = 0;
for (int i = 2; i <= n; ++i) {
log2_table[i] = log2_table[i / 2] + 1;
}
int k = log2_table[n];
std::vector<std::vector<int>> sparse_table(n);
for (int i = 0; i < n; ++i) {
int x;
ifs >> x;
sparse_table[i].resize(k);
sparse_table[i][0] = x;
}
for (int j = 1; j <= k; ++j) {
for (int i = 0; i + (1 << j) <= n; ++i) {
sparse_table[i][j] =
std::min(sparse_table[i][j - 1],
sparse_table[i + (1 << (j - 1))][j - 1]);
}
}
std::ofstream ofs("rmq.out");
// Read queries
for (int q = 0; q < m; ++q) {
int l, r;
ifs >> l >> r;
int j = log2_table[r - l + 1];
ofs << std::min(sparse_table[l][j], sparse_table[r - (1 << j)][j]) << '\n';
}
ifs.close();
ofs.close();
return 0;
}