Pagini recente » Cod sursa (job #2373401) | Cod sursa (job #232131) | Cod sursa (job #469738) | Cod sursa (job #1408922) | Cod sursa (job #2175153)
#include <iostream>
#include <cstdio>
using namespace std;
#define DIM 100004
int pw[DIM], dp[DIM][20], N, M;
int main() {
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d\n", &N, &M);
int p = 1, depus = 0;
for(int i = 1; i <= N; ++i) {
scanf("%d\n", &dp[i][0]);
if(2 * p <= i) {
p <<= 1;
depus++;
}
pw[i] = depus;
}
for(int lg = 2, j = 1; lg <= N; lg *= 2, j++) {
for(int i = 1; i + lg - 1 <= N; ++i) {
dp[i][j] = min(dp[i][j - 1], dp[i + lg / 2][j - 1]);
}
}
while(M--) {
int x, y;
scanf("%d %d\n", &x, &y);
cout << min(dp[x][pw[y - x + 1]], dp[y - (1 << pw[y - x + 1]) + 1][pw[y - x + 1]]) << '\n';
}
return 0;
}