Pagini recente » Cod sursa (job #2402049) | Cod sursa (job #1480612) | Cod sursa (job #57836) | Cod sursa (job #779475) | Cod sursa (job #2379686)
#include <cmath>
#include <fstream>
#define LMAX 20
#define NMAX 100010
std::ifstream fin("rmq.in");
std::ofstream fout("rmq.out");
int n;
int v[NMAX];
int q;
int dp[NMAX][LMAX];
inline int min(int x, int y) {
return x < y ? x : y;
}
int rmq(int lo, int hi) {
int k = log2(hi - lo + 1);
return min(v[dp[lo][k]], v[dp[hi - (1 << k) + 1][k]]);
}
int main() {
fin >> n >> q;
for (int i = 1; i <= n; i++) {
fin >> v[i];
dp[i][0] = i;
}
for (int i = n; i >= 1; i--)
for (int j = 1; i + (1 << j) - 1 <= n; j++)
if (v[dp[i][j - 1]] < v[dp[i + (1 << (j - 1)) - 1][j - 1]])
dp[i][j] = dp[i][j - 1];
else
dp[i][j] = dp[i + (1 << (j - 1)) - 1][j - 1];
int lo, hi;
for (int it = 0; it < q; it++) {
fin >> lo >> hi;
fout << rmq(lo, hi) << '\n';
}
fout.close();
return 0;
}