Pagini recente » Cod sursa (job #811134) | Istoria paginii runda/rar96/clasament | Cod sursa (job #1352149) | Cod sursa (job #984701) | Cod sursa (job #2787600)
#include <iostream>
#include <fstream>
using namespace std;
int n, q, rmq[100005][1005], p = 1, lg, ex, pw[100005], x, y, j;
int main()
{
ifstream cin("rmq.in");
ofstream cout("rmq.out");
cin >> n >> q;
for (int i = 1;i <= n;i++) {
cin >> x;
rmq[i][0] = x;
if (p * 2 <= i)
{
ex++;
p = p * 2;
}
pw[i] = ex;
}
for (lg = 2, j = 1;lg <= n;lg *= 2, j++)
for (int i = 1;i + lg-1 <= n;i++)
rmq[i][j] = min(rmq[i][j - 1], rmq[i + lg / 2][j - 1]);
while (q) {
cin >> x >> y;
cout << min(rmq[x][pw[y - x + 1]], rmq[y - pw[y - x + 1]*2 + 1][pw[y - x + 1]]) << endl;
q--;
}
}