Pagini recente » Cod sursa (job #2899454) | Cod sursa (job #1640086) | Cod sursa (job #2492628) | Cod sursa (job #681787) | Cod sursa (job #2216820)
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int MAXN = 1e5;
const int MAXM = 1e6;
const int MAX2 = 18;
int n, m;
int v[MAXN + 1];
int dp[MAXN + 1][MAX2];
int p[18];
void precalc() {
p[0] = 1;
for (int i = 1; i < MAX2; ++ i) {
p[i] = p[i - 1] * 2;
}
}
int main() {
in >> n >> m;
int put = 1;
while (put <= n)
put <<= 1;
put >>= 1;
precalc();
for (int i = 1; i <= n; ++ i) {
in >> v[i];
dp[i][0] = v[i];
}
for (int j = 1; j <= put; ++ j) {
for (int i = 1; i + p[j] - 1 <= n; ++ i) {
dp[i][j] = min(dp[i][j - 1], dp[i + p[j - 1]][j - 1]);
}
}
int x, y, l;
for (int i = 1; i <= m; ++ i) {
in >> x >> y;
l = y - x + 1;
for (int j = 0; j < MAX2 && p[j] <= l; ++ j) {
put = j;
}
out << min(dp[x][put], dp[y - p[put] + 1][put]) << '\n';
}
return 0;
}