Pagini recente » Cod sursa (job #575434) | Cod sursa (job #3220763) | Cod sursa (job #2329387) | Cod sursa (job #362838) | Cod sursa (job #2606612)
#include <iostream>
#include <stdio.h>
using namespace std;
const int NMAX = 100005;
const int MMAX = 1000005;
int rmq[17][NMAX], log2[MMAX], v[NMAX];
int main() {
freopen ("rmq.in", "r", stdin);
freopen ("rmq.out", "w", stdout);
int n, i, j, jj, l, pp, rez, m, p, q;
scanf ("%d%d", &n, &m);
for (i = 1; i <= n; i++)
scanf ("%d", &v[i]);
for (j = 1; j <= n; j++) {
for (i = 0; (1<<i) <= j; i++) {
if (i == 0)
rmq[i][j] = v[j];
else {
jj = j - (1<<(i - 1));
rmq[i][j] = min(rmq[i - 1][jj], rmq[i - 1][j]);
}
}
}
log2[1] = 0;
for (i = 2; i <= n; i++)
log2[i] = 1 + log2[i / 2];
for (i = 1; i <= m; i++) {
scanf ("%d%d", &p, &q);
l = log2[q - p + 1];
pp = p + (1<<l) - 1;
rez = min(rmq[l][pp], rmq[l][q]);
printf ("%d\n", rez);
}
return 0;
}