Pagini recente » Cod sursa (job #2913383) | Cod sursa (job #351742) | Cod sursa (job #804477) | Cod sursa (job #2497391) | Cod sursa (job #2775970)
#include <iostream>
#include <fstream>
#include <climits>
#include <cstdio>
#define MAXN 100001
#define LOG 18
using namespace std;
int N, M;
int v[MAXN], rmq[2*MAXN][LOG], log[MAXN];
int x, y;
int main() {
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d %d", &N, &M);
for(int i = 1; i <= N; i++) {
scanf("%d", &v[i]);
rmq[i][0] = v[i];
}
for(int j = 1; j < LOG; j++) {
for(int i = 1; i <= N; i++) {
rmq[i][j] = min(rmq[i][j-1], rmq[i + (1 << (j-1))][j-1]);
}
}
log[0] = log[1] = 0;
for(int i = 2; i < MAXN; i++) {
log[i] = 1 + log[i/2];
}
for(int i = 1; i <= M; i++) {
scanf("%d %d", &x, &y);
int L = log[y-x+1];
printf("%d\n",min(rmq[x][L], rmq[y -(1 << L) + 1][L]));
}
}