Pagini recente » Cod sursa (job #2048483) | Cod sursa (job #1731615) | Cod sursa (job #2337139) | Cod sursa (job #112963) | Cod sursa (job #1547652)
#include <cstdio>
#include <algorithm>
using std :: min;
const int maxN = 100000;
int rmq[20][maxN];
int Log[maxN];
int query(int x, int y) {
int l = y - x + 1;
int step = Log[l];
return min(rmq[step][x], rmq[step][y - (1 << step) + 1]);
}
int main() {
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int N, T;
scanf("%d %d", &N, &T);
for(int i = 0; i < N; ++ i)
scanf("%d", &rmq[0][i]);
for(int i = 2; i <= N; ++ i)
Log[i] = Log[i >> 1] + 1;
for(int step = 1; step <= Log[N]; ++ step) {
for(int i = 0; i + (1 << (step - 1)) < N; ++ i)
rmq[step][i] = min(rmq[step - 1][i], rmq[step - 1][i + (1 << (step - 1))]);
}
int x, y;
while(T --) {
scanf("%d %d", &x, &y);
printf("%d\n", query(x - 1, y - 1));
}
return 0;
}