Pagini recente » Cod sursa (job #826501) | Cod sursa (job #1096277) | Cod sursa (job #1346380) | Cod sursa (job #111623) | Cod sursa (job #2860493)
#include <fstream>
using namespace std;
const int NMAX = 100003, LMAX = 18;
int a[NMAX], log[NMAX], r[LMAX][NMAX];
int main()
{
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n, m, i, j;
cin >> n >> m;
log[0] = -1;
for (i = 1; i <= n; i++)
{
cin >> a[i];
log[i] = log[(i >> 1)] + 1;
r[0][i] = i;
}
for (i = 1; i <= log[n]; i++)
for (j = (1 << i); j <= n; j++)
if (a[r[i - 1][j]] > a[r[i - 1][j - (1 << (i - 1))]])
r[i][j] = r[i - 1][j - (1 << (i - 1))];
else
r[i][j] = r[i - 1][j];
while (m--)
{
int x, y;
cin >> x >> y;
if (a[r[log[y - x + 1]][y]] >
a[r[log[y - x + 1]][x + (1 << log[y - x + 1]) - 1]])
cout << a[r[log[y - x + 1]][x + (1 << log[y - x + 1]) - 1]];
else
cout << a[r[log[y - x + 1]][y]];
cout << "\n";
}
}