Pagini recente » Cod sursa (job #2810279) | Cod sursa (job #662607) | Cod sursa (job #2597828) | Clasament cnlr_x_round1 | Cod sursa (job #2814912)
#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 - (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; (1 << i) < n; ++ i) {
int j;
for (j = 0; j < n - (1 << i) + 1; ++ j) {
fprintf(stderr, "%d ", dp[i][j]);
}
fputc('\n', stderr);
}
for (i = 0; i != q; ++ i) {
int a, b;
scanf("%d%d", &a, &b);
printf("%d\n", min(a - 1, b));
}
}