Pagini recente » Cod sursa (job #2943474) | Cod sursa (job #104187) | Cod sursa (job #389081) | Cod sursa (job #688138) | Cod sursa (job #886515)
Cod sursa(job #886515)
#include <algorithm>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int MAX_N = 100100;
const int MAX_LOG = 20;
int N, M;
int rm[MAX_N][MAX_LOG];
int log2[MAX_LOG];
int main() {
fin >> N >> M;
for (int i = 1; i <= N; ++i) {
fin >> rm[i][0];
}
for (int j = 1; (1 << j) <= N; ++j) {
for (int i = 1; i + (1 << j) - 1 <= N; ++i) {
rm[i][j] = min(rm[i][j - 1], rm[i + (1 << (j - 1))][j - 1]);
}
}
log2[1] = 0;
for (int i = 2; i < MAX_LOG; ++i) {
log2[i] = log2[i / 2] + 1;
}
int lo, hi;
for (int i = 1; i <= M; ++i) {
fin >> lo >> hi;
int k = log2[hi - lo + 1];
fout << min(rm[lo][k], rm[hi - (1 << k) + 1][k]) << '\n';
}
return 0;
}