Pagini recente » Cod sursa (job #3245091) | Cod sursa (job #1973546) | Cod sursa (job #766891) | Cod sursa (job #660239) | Cod sursa (job #2799246)
#include <fstream>
#include <cmath>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int const LOGMAX = 20;
int const NMAX = 2e5;
int rmq[LOGMAX][1 + NMAX];
void precomputeRMQ(int n) {
for(int j = 1;(1 << j) <= n;j++){
for(int i = 1;i <= n;i++) {
rmq[j][i] = min(rmq[j-1][i], rmq[j-1][i + (1 << (j-1))]);
}
}
}
int calculateLOG(int n) {
return (31 - __builtin_clz(n));
}
int main() {
int n, t;
in >> n >> t;
for(int i = 1;i <= n;i++){
in >> rmq[0][i];
}
precomputeRMQ(n);
for(int q = 1;q <= t;q++){
int a, b;
in >> a >> b;
int log = calculateLOG(abs(a - b) + 1);
out << min(rmq[log][a], rmq[log][b - (1 << log) + 1]) << '\n';
}
return 0;
}