Pagini recente » Cod sursa (job #84708) | Cod sursa (job #702478) | Cod sursa (job #161127) | Cod sursa (job #1605449) | Cod sursa (job #3236827)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int N_max = 1000005, LOG = 19;
int rmq[LOG][N_max];
int log[N_max];
void createlog() {
log[1] = 0;
for(int i = 1; i <= N_max - 1; i++)log[i] = log[i / 2] + 1;
}
int get_min(int x, int y){
int l = log[x - y + 1];
return min(rmq[l][x], rmq[l][y - (1 << l) + 1]);
}
int main() {
createlog();
int n, m;
fin >> n >> m;
for(int i = 1; i <= n; i++){
fin >> rmq[0][i];
}
int lo = log[n];
for(int l = 1; l <= lo; l++) {
for(int i = 1; i <= n - (1 << l) + 1; i++) {
rmq[l][i] = min(rmq[l - 1][i], rmq[l - 1][i + (1 << (l - 1))]);
}
}
while(m--) {
int x, y;
fin >> x >> y;
fout << get_min(x, y) << '\n';
}
}