Pagini recente » Cod sursa (job #899600) | Cod sursa (job #2588604) | Cod sursa (job #2621373) | Cod sursa (job #2259315) | Cod sursa (job #2814905)
#include <math.h>
#include <stdio.h>
#define MIN(p, q) ((p) < (q) ? (p) : (q))
int dp[20][100000];
void
gen_rmq (int n) {
/* The elements of the vector are on dp[0][...] */
int i;
for (i = 1; (1 << i) < n; ++ i) {
int j;
for (j = 0; j < n - (1 << i) + 1; ++ j) {
dp[i][j] = MIN(dp[i - 1][j], dp[i - 1][j + (1 << (i - 1))]);
}
}
}
int
min (int a, int b) {
int dist = log2(b - a);
return MIN(dp[dist][a],
dp[dist][b - 1 - dist]);
}
int main () {
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int n, q;
scanf("%d%d", &n, &q);
int i;
for (i = 0; i != n; ++ i)
scanf("%d", &dp[0][i]);
gen_rmq(n);
for (i = 0; i != q; ++ i) {
int a, b;
scanf("%d%d", &a, &b);
printf("%d\n", min(a - 1, b));
}
}