Pagini recente » Cod sursa (job #3166759) | Cod sursa (job #1071188) | Cod sursa (job #2036202) | Cod sursa (job #2317430) | Cod sursa (job #598751)
Cod sursa(job #598751)
#include <cstdio>
#include <cstring>
using namespace std;
#define MAX_N 100005
#define MAX_L 20
int d[MAX_N][MAX_L];
int main () {
freopen ("rmq.in", "r", stdin);
freopen ("rmq.out", "w", stdout);
int N, M;
scanf ("%d %d", &N, &M);
for (int i = 0; i < N; ++i)
scanf ("%d", d[i]);
for (int j = 1; 1 << j <= N; ++j)
for (int i = 0; i + (1 << j) <= N; ++i)
if (d[i][j - 1] < d[i + (1 << (j - 1))][j - 1])
d[i][j] = d[i][j - 1];
else
d[i][j] = d[i + (1 << (j - 1))][j - 1];
for (int i = 0; i < M; ++i) {
int a, b, pe;
scanf ("%d %d", &a, &b); --a; --b;
for (pe = 0; (1 << pe) <= b - a + 1; ++pe); --pe;
if (d[a][pe] < d[b - (1 << pe) + 1][pe])
printf ("%d\n", d[a][pe]);
else
printf ("%d\n", d[b - (1 << pe) + 1][pe]);
}
}