Pagini recente » Cod sursa (job #995078) | Cod sursa (job #1446794) | Cod sursa (job #2914327) | Cod sursa (job #2796012) | Cod sursa (job #2346343)
#include <cstdio>
#include <cmath>
#include <algorithm>
#define MAX 100005
using namespace std;
int RMQ[18][MAX];
int solve(int x, int y){
int rq = log2(y - x + 1);
int pow2 = (1 << rq);
int sol = min(RMQ[rq][x], RMQ[rq][y - pow2 + 1]);
return sol;
}
int main(){
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int N, Q;
scanf("%d%d", &N, &Q);
for (int i = 1; i <= N; ++i){
scanf("%d", &RMQ[0][i]);
}
for (int i = 1; (1 << i) <= N; ++i){
for (int j = 1; j <= N - (1 << i) + 1; ++j){
int rq = (1 << (i - 1));
RMQ[i][j] = min(RMQ[i - 1][j], RMQ[i - 1][j + rq]);
}
}
for (int i = 1; i <= Q; ++i){
int x, y;
scanf("%d%d", &x, &y);
printf("%d\n", solve(x, y));
}
return 0;
}