Pagini recente » Cod sursa (job #2693176) | Cod sursa (job #1681679) | Cod sursa (job #1933540) | Cod sursa (job #2270087) | Cod sursa (job #1495255)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("rmq.in");
ofstream g ("rmq.out");
const int NMAX = 100000 + 1;
const int LOGMAX = 18;
int n, q;
int log2[NMAX];
int pow2[LOGMAX];
int rmq[LOGMAX][NMAX];
void read() {
f >> n >> q;
for (int i = 1; i <= n; i++) f >> rmq[0][i];
}
void init() {
for (int i = 2; i <= n; i++) log2[i] = log2[i / 2] + 1;
pow2[0] = 1;
for (int i = 1; i < LOGMAX; i++) pow2[i] = pow2[i - 1] * 2;
for (int p = 1; pow2[p] <= n; p++) {
int lg = pow2[p - 1];
for (int i = 1; i <= n - lg + 1; i++)
rmq[p][i] = min(rmq[p - 1][i], rmq[p - 1][i + lg]);
}
}
void solve() {
int a, b;
for (int i = 1; i <= q; i++) {
f >> a >> b;
int lg = log2[b - a + 1];
b = b + 1 - pow2[lg];
g << min(rmq[lg][a], rmq[lg][b]) << '\n';
}
}
int main() {
read();
init();
solve();
return 0;
}