Pagini recente » Cod sursa (job #2553286) | Cod sursa (job #911171) | Cod sursa (job #1147240) | Cod sursa (job #1464493) | Cod sursa (job #2787602)
#include <iostream>
#include <fstream>
using namespace std;
int n, q, rmq[100005][25], 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--;
}
}