Pagini recente » Cod sursa (job #192191) | Cod sursa (job #1299050) | Cod sursa (job #434375) | Cod sursa (job #1490350) | Cod sursa (job #3160626)
#include <fstream>
#include <cmath>
#define N_MAX 100005
#define EXP_MAX 17
int vec[N_MAX];
int vals[N_MAX][EXP_MAX];
int RMQ(std::pair<int, int> range) {
int length = range.second - range.first + 1;
int power = std::log2(length);
return std::min(vals[range.first][power], vals[range.second - (1 << power) + 1][power]);
}
int main() {
std::ifstream fin("rmq.in");
std::ofstream fout("rmq.out");
int n, q, i;
fin >> n >> q;
for (i = 0; i < n; i++) {
fin >> vec[i];
vals[i][0] = vec[i];
}
for (int exp = 1; exp < EXP_MAX; exp++)
for (int i = 0; i + (1 << exp) <= n; i++)
vals[i][exp] = std::min(vals[i][exp - 1], vals[i + (1 << (exp - 1))][exp - 1]);
for (int i = 0; i < q; i++) {
int a, b;
fin >> a >> b;
fout << RMQ({ a-1,b-1 }) << '\n';
}
return 0;
}