Pagini recente » Cod sursa (job #2058896) | Cod sursa (job #1419964) | Cod sursa (job #1697515) | Cod sursa (job #1749083) | Cod sursa (job #1940643)
#include <iostream>
#include <fstream>
using namespace std;
int n, nq;
int m[18][100005], v[100005], lg[100005];
void logs() {
for (int i = 2; i <= n; ++i) {
lg[i] = lg[i / 2] + 1;
}
}
void preprocess_rmq() {
logs();
for (int j = 1; (1 << j) <= n; ++j) {
int val = n - (1 << j) + 1;
for (int i = 1; i <= val; ++i) {
m[j][i] = min(m[j-1][i], m[j-1][i + (1 << (j-1))]);
}
}
}
int rmq(int i, int j) {
int l = j - i + 1;
int k = lg[l];
return min(m[k][i], m[k][i + l - (1 << k) ]);
}
int main() {
ifstream in("rmq.in");
ofstream out("rmq.out");
in >> n >> nq;
for (int i = 1; i <= n; ++i) in >> m[0][i];
preprocess_rmq();
int l;
for (int q = 1, i, j; q <= nq; ++q) {
in >> i >> j;
l = j - i + 1;
out << min(m[lg[l]][i], m[lg[l]][i + l - (1 << lg[l]) ]) << '\n';
}
return 0;
}