Pagini recente » Cod sursa (job #990625) | Cod sursa (job #1686659) | Cod sursa (job #2591362) | Cod sursa (job #2678263) | Cod sursa (job #2763189)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int const NMAX = 1e5;
int arr[1 + NMAX];
int rmq[32][1 + NMAX];
int n, nq;
void buildRMQ() {
for(int j = 0;j <= 17;j++){
for(int i = 1;i + (1 << j) - 1 <= n;i++){
if(j == 0){
rmq[j][i] = arr[i];
}else{
rmq[j][i] = min(rmq[j-1][i], rmq[j-1][i + (1 << (j-1))]);
}
}
}
}
int lg(int length) {
return 31 - __builtin_clz(length);
}
int computeRMQ(int left, int right){
int length = right - left + 1;
return min(rmq[lg(length)][left], rmq[lg(length)][right - (1 << lg(length)) + 1]);
}
int main() {
in >> n >> nq;
for(int i = 1;i <= n;i++){
in >> arr[i];
}
buildRMQ();
int left, right;
for(int i = 1;i <= nq;i++){
in >> left >> right;
out << computeRMQ(left, right);
}
return 0;
}