Pagini recente » Cod sursa (job #2928096) | Cod sursa (job #2495548) | Cod sursa (job #2434427) | Cod sursa (job #2799073) | Cod sursa (job #3306362)
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m, x, st, dr, dp[25][100005];
int pwr (int x) {
int p = 1;
while ((1<<p) <= x)
++p;
return p-1;
}
int main()
{
f >> n >> m;
for (int i=1; i<=n; ++i)
f >> dp[0][i];
for (int p=1; (1<<p)<=n; p++)
for (int i=1; i<=n; ++i) {
dp[p][i] = dp[p-1][i];
int x = (1 << (p-1));
if (i + x <= n && dp[p-1][i+x] < dp[p][i])
dp[p][i] = dp[p-1][i+x];
}
for (int i=1; i<=m; ++i) {
f >> st >> dr;
int p = pwr (dr - st + 1);
g << min (dp[p][st], dp[p][dr - (1<<p) + 1]) << '\n';
}
return 0;
}