Pagini recente » Cod sursa (job #541745) | Cod sursa (job #1750864) | Cod sursa (job #515814) | Cod sursa (job #949097) | Cod sursa (job #3140659)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int NMAX = 1e5;
int n, query, a[NMAX], rmq[NMAX][17];
void answerQuery(int left, int right) {
int log = log2(right - left + 1);
fout << min(rmq[left][log], rmq[right + 1 - (1 << log)][log]) << '\n';
}
void read() {
fin >> n >> query;
for (int i = 0; i < n; ++i) {
fin >> a[i];
}
}
void precaculate() {
for (int i = 0; i < n; ++i) {
rmq[i][0] = a[i];
}
for (int j = 1; j <= log2(n); ++j) {
for (int i = 0; i + (1 << j) <= n; ++i) {
rmq[i][j] = min(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
}
}
}
void solve() {
int left, right;
fin >> left >> right;
answerQuery(left - 1, right - 1);
}
int main() {
read();
precaculate();
while (query--) {
solve();
}
return 0;
}