Pagini recente » Cod sursa (job #3000636) | Cod sursa (job #3212427) | Cod sursa (job #3247752) | Cod sursa (job #225873) | Cod sursa (job #2013699)
#include <iostream>
#include <fstream>
const int MAXN = 100001, MAXLN = 18;
int n, m, rmq[MAXLN][MAXN], lg[MAXN];
using namespace std;
int main(int argc, const char * argv[]) {
ifstream cin("rmq.in");
ofstream cout("rmq.out");
cin >> n >> m;
// Preprocessing step
lg[1] = 0;
for (int i = 2; i <= n; i++) {
lg[i] = lg[i/2] + 1;
}
for (int j = 1; j <= n; j++) {
cin >> rmq[0][j];
}
for (int i = 1; (1 << i) <= n; i++) {
for (int j = 1; j + (1 << i) - 1 <= n; j++) {
int l = 1 << (i - 1);
rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+l]);
}
}
// Query step
int left, right;
for (int i = 0; i < m; i++) {
cin >> left >> right;
int diff = right - left + 1;
int t = lg[diff];
int sh = diff - (1 << t);
cout << min(rmq[t][left], rmq[t][left + sh]) << "\n";
}
cout << "\n";
return 0;
}