Pagini recente » Cod sursa (job #1340382) | Cod sursa (job #2386347) | Cod sursa (job #3199213) | Cod sursa (job #2126838) | Cod sursa (job #401571)
Cod sursa(job #401571)
#include <cstdio>
#include <algorithm>
using namespace std;
#define Nmax 100010
int n, T, A, B;
int a[18][Nmax], lg[Nmax];
void rmq () {
lg[1] = 0; int l, i;
for (i = 2; i <= n + 1; i++)
lg[i] = lg[i >> 1] + 1;
for (l = 1; l <= lg[n]; l++)
for (i = 1; i + (1 << l) - 1 <= n; i++)
a[l][i] = min (a[l-1][i], a[l-1][ i + (1 << (l- 1))]);
}
int query (int A, int B) {
int dif = lg[B - A + 1];
return min (a[dif][A], a[dif][B - (1 << dif) + 1]);
}
int main () {
freopen ("rmq.in", "r", stdin);
freopen ("rmq.out", "w", stdout);
scanf ("%d %d", &n, &T);
for (int i = 1; i <= n; i++)
scanf ("%d", &a[0][i]);
rmq ();
for (; T; T--) {
scanf ("%d %d", &A, &B);
printf ("%d\n", query (A, B));
}
return 0;
}