Pagini recente » Cod sursa (job #710379) | Cod sursa (job #2114812) | Cod sursa (job #2351425) | Cod sursa (job #1371227) | Cod sursa (job #387120)
Cod sursa(job #387120)
#include <cstdio>
#include <algorithm>
using namespace std;
#define Nmax 100010
int i, n, T;
int a[20][Nmax], lg[Nmax];
void rmq () {
int i, l, len;
for (i = 2; i <= n; i++)
lg[i] = lg[i >> 1] + 1;
for (l = 1; l <= lg[n] + 1; l++)
for (i = 1; i + (1 << l) - 1 <= n; i++) {
len = 1 << (l-1);
a[l][i] = min (a[l-1][i], a[l-1][i + len]);
}
}
int query (int st, int dr) {
int dif = dr - st + 1;
return min ( a[lg[dif]][st], a[lg[dif]][dr - (1 << lg[dif]) + 1] );
}
int main () {
freopen ("rmq.in", "r", stdin);
freopen ("rmq.out", "w", stdout);
scanf ("%d %d", &n, &T);
for (i = 1; i <= n; i++)
scanf ("%d", &a[0][i]);
rmq ();
int st, dr;
for (; T; T--) {
scanf ("%d %d", &st, &dr);
printf ("%d\n", query (st, dr));
}
return 0;
}