Pagini recente » Cod sursa (job #466006) | Cod sursa (job #1421926) | Cod sursa (job #760027) | Cod sursa (job #3206759) | Cod sursa (job #2369221)
#include <stdio.h>
#define MAXN 100000
#define MAXK 17
#define MIN(a, b) ((a) < (b) ? (a) : (b))
int rmq[MAXN][MAXK + 1];
int logv[MAXN + 1];
int main() {
FILE *fin = fopen("rmq.in", "r"),
*fout = fopen("rmq.out", "w");
int n, m, i, j;
int l, r;
logv[1] = 0;
for (i = 2; i <= MAXN; i++) {
logv[i] = logv[i >> 1] + 1;
}
fscanf(fin, "%d%d", &n, &m);
for (i = 0; i < n; i++) {
fscanf(fin, "%d", &rmq[i][0]);
}
for (j = 1; j <= logv[n] + 1; j++) {
for (i = 0; i + (1 << j) <= n; i++) {
rmq[i][j] = MIN(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
}
}
for (i = 0; i < m; i++) {
fscanf(fin, "%d%d", &l, &r);
l--; r--;
j = logv[r - l + 1];
fprintf(fout, "%d\n", MIN(rmq[l][j], rmq[r - (1 << j) + 1][j]));
}
fclose(fin);
fclose(fout);
return 0;
}