Pagini recente » Cod sursa (job #345937) | ONIS 2014, Clasament Runda 1 | Cod sursa (job #2432565) | Cod sursa (job #1038104) | Cod sursa (job #2738445)
#include <fstream>
using namespace std;
const int N = 1e5;
const int LOG = 17;
int v[N + 1], r[LOG][N + 1], log2[N + 1];
void precalc(int n) {
for (int i = 2; i <= n; ++i)
log2[i] = 1 + log2[i / 2];
}
int main() {
ifstream in("rmq.in");
ofstream out("rmq.out");
int n, q;
in >> n >> q;
for (int i = 1; i <= n; ++i)
in >> v[i];
precalc(n);
int p2;
for (int j = 1; j <= n; ++j)
r[0][j] = v[j];
for (int j = 1; j <= n; ++j)
for (int i = 1; i <= log2[n] && (1 << i) <= j; ++i) {
p2 = (1 << (i - 1));
r[i][j] = min(r[i - 1][j - p2], r[i - 1][j]);
}
int x, y, lg;
while (q--) {
in >> x >> y;
lg = log2[y - x + 1];
p2 = (1 << lg);
out << min(r[lg][y], r[lg][x + p2 - 1]) << '\n';
}
in.close();
out.close();
return 0;
}