Pagini recente » Monitorul de evaluare | Atasamentele paginii Profil andracatalina | Borderou de evaluare (job #3111080) | Autentificare | Cod sursa (job #3357905)
#include <iostream>
#include <fstream>
#include <cmath>
const int MAX_SIZE = 100000;
const int LOG = 17;
int main() {
std::ifstream input("rmq.in");
std::ofstream output("rmq.out");
int n, m;
int a[MAX_SIZE];
int rmq[MAX_SIZE][LOG];
input >> n >> m;
for (int i = 0; i < n; ++i) {
input >> a[i];
rmq[i][0] = a[i];
}
for (int j = 1; (1 << j) <= n; ++j) {
for (int i = 0; i + (1 << j) - 1 < n; ++i) {
rmq[i][j] = std::min(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
}
}
while (m--) {
int x, y;
input >> x >> y;
x--; y--;
int k = std::log2(y - x + 1);
int min_val = std::min(rmq[x][k], rmq[y - (1 << k) + 1][k]);
output << min_val << '\n';
}
return 0;
}