Pagini recente » Cod sursa (job #2462256) | Cod sursa (job #1219190) | Cod sursa (job #2117800) | Cod sursa (job #634000) | Cod sursa (job #2640283)
#include <stdio.h>
#define N 100000
#define log(x) 31 - __builtin_clz(x)
int dp[log(N) + 1][N];
static inline int min (int a, int b) {
return a < b ? a : b;
}
int main (void) {
FILE *fin = fopen("rmq.in", "r"),
*fout = fopen("rmq.out", "w");
int n, m;
fscanf(fin, "%d%d", &n, &m);
int i, j;
for (i=0; i<n; ++i)
fscanf(fin, "%d", dp[0] + i);
for (i=1; (1 << i) <= n; ++i)
for (j=0; j + (1 << i) <= n; ++j)
dp[i][j] = min(dp[i-1][j], dp[i-1][j + (1 << i-1)]);
int lg;
for (; m; --m) {
fscanf(fin, "%d%d", &i, &j);
--i, --j;
lg = log(j-i+1);
fprintf(fout, "%d\n", min(dp[lg][i], dp[lg][j - (1 << lg) + 1]));
}
return 0;
}