Pagini recente » Istoria paginii utilizator/ilinca_luisa | Cod sursa (job #3030876) | Cod sursa (job #589549) | Rating Mihaita Catalin Banica (Mihai194) | Cod sursa (job #2787598)
#include <iostream>
#include <fstream>
using namespace std;
int n, q, rmq[1005][1005], p = 1, lg, ex, pw[1005], v[1005], x, y, j;
int main()
{
ifstream cin("rmq.in");
ofstream cout("rmq.out");
cin >> n >> q;
for (int i = 1;i <= n;i++) {
cin >> v[i];
rmq[i][0] = v[i];
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--;
}
}