Pagini recente » Cod sursa (job #1546314) | Cod sursa (job #3178694) | Cod sursa (job #2283756) | Cod sursa (job #473860) | Cod sursa (job #965200)
Cod sursa(job #965200)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int DMAX = 100004;
vector <int> RMQ[18];
int l2 [DMAX];
int main() {
freopen ("rmq.in", "r", stdin);
freopen ("rmq.out","w",stdout);
int N, M, i, j, a, b, l;
l2[1] = 0;
scanf ("%d%d", &N, &M);
for (i = 1; i <= N; ++i)
scanf ("%d", &a), RMQ[0].push_back (a), l2[i + 1] = l2[(i + 1) / 2] + 1;
for (i = 1; (1 << i) <= N; ++i) {
l = 1 << i - 1;
for (j = 0; j <= N - (1 << l); ++j)
RMQ[i].push_back (min (RMQ[i - 1][j], RMQ[i - 1][j + l]));
}
while (M--)
scanf ("%d%d", &a, &b),
l = b - a + 1,
printf ("%d\n", min (RMQ[l2[l]][a - 1], RMQ[l2[l]][a + l - (1 << l2[l]) - 1]));
}