Pagini recente » Cod sursa (job #2431422) | Cod sursa (job #1967508) | Cod sursa (job #2312013) | Cod sursa (job #357623) | Cod sursa (job #2467473)
#include<chrono>
#include<bits/stdc++.h>
using namespace std;
int rmq[18][100009], lg[100009];
int query (int x, int y) {
int p = lg[y - x + 1];
return min (rmq[p][x], rmq[p][y - (1 << p) + 1]);
}
int main () {
freopen ("rmq.in", "r", stdin);
freopen ("rmq.out", "w", stdout);
int N, M;
scanf ("%d %d", &N, &M);
for (int i=2; i<=N; i++)
{
lg[i] = lg[i - 1];
lg[i] += ((2 << lg[i]) <= i);
}
for (int i=1; i<=N; i++)
scanf ("%d", &rmq[0][i]);
for (int i=1; i<=lg[N]; i++)
for (int j=1; j + (1 << i) - 1 <= N; j++)
rmq[i][j] = min (rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);
while (M --) {
int l, r;
scanf ("%d %d", &l, &r);
printf ("%d\n", query (l, r));
}
return 0;
}