Pagini recente » Cod sursa (job #1848397) | Cod sursa (job #3224370) | Cod sursa (job #1594114) | Cod sursa (job #1346186) | Cod sursa (job #2511900)
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 100505;
const int LMAX = 17;
int minV[LMAX][NMAX];
int lg[NMAX];
int N, queries;
void precompute() {
for (int i = 2; i <= N; i++) {
lg[i] = lg[i >> 1] + 1;
}
for (int idx = 1; (1 << idx) <= N; idx++) {
for (int start = 1; start <= N - (1 << idx) + 1; start++) {
minV[idx][start] = min(minV[idx - 1][start], minV[idx - 1][start + (1 << (idx - 1))]);
}
}
}
int main() {
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d%d", &N, &queries);
for (int i = 1; i <= N; i++) {
scanf("%d", &minV[0][i]);
}
precompute();
int x, y;
for (int query = 0; query < queries; query++) {
scanf("%d%d", &x, &y);
int log2Value = lg[y - x + 1];
printf("%d\n", min(minV[log2Value][x], minV[log2Value][y - (1 << log2Value) + 1]));
}
return 0;
}