Pagini recente » Cod sursa (job #1793590) | Cod sursa (job #1750234) | Cod sursa (job #2266044) | Cod sursa (job #2816882) | Cod sursa (job #1300969)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f ("rmq.in");
ofstream g ("rmq.out");
const int NMAX = 100000 + 1;
const int LOGMAX = 17;
int n, q;
int rmq[LOGMAX][NMAX], lg2[NMAX];
void initializeaza() {
int l;
for (int i = 2; i <= n; i++) lg2[i] = lg2[i / 2] + 1;
for (int i = 1; i <= n; i++) f >> rmq[0][i];
for (int i = 1; (1 << i) <= n; i++)
for (int j = 1; j <= n - (1 << i) + 1; j++) {
l = 1 << (i - 1);
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + l]);
//cout << rmq[i][j] << ' ';
}
}
void raspunde() {
int a, b, dif, l, l2;
while (q--) {
f >> a >> b;
dif = b - a + 1;
l = lg2[dif];
l2 = dif - (1 << l);
g << min(rmq[l][a], rmq[l][a + l2]) << '\n';
}
}
int main() {
f >> n >> q;
initializeaza();
raspunde();
return 0;
}