Pagini recente » Cod sursa (job #674223) | Cod sursa (job #2357638) | Cod sursa (job #2389024) | Cod sursa (job #585973) | Cod sursa (job #2848533)
#include <fstream>
#include <queue>
using namespace std;
const int NMAX = 100003, LMAX = 18;
int r[LMAX][NMAX], v[NMAX], prec[NMAX];
int main()
{
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n, m, i, j;
cin >> n >> m;
prec[0] = -1;
for (i = 1; i <= n; i++)
{
cin >> v[i];
r[0][i] = v[i];
prec[i] = prec[i - 1] + (!(i & (i - 1)));
}
for (i = 1; i <= prec[n]; i++)
for (j = (1 << i); j <= n; j++)
r[i][j] = min(r[i - 1][j], r[i - 1][j - (1 << (i - 1))]);
while (m--)
{
int x, y;
cin >> x >> y;
cout << min(r[prec[y - x + 1]][y],
r[prec[y - x + 1]][x + (1 << prec[y - x + 1]) - 1]) << "\n";
}
}