Pagini recente » Borderou de evaluare (job #838448) | Cod sursa (job #754239) | Cod sursa (job #1252234)
#include <math.h>
#include <stdio.h>
#define MAX_N 1000
#define MAX_LOG 10
#define min(x,y) ((x) < (y) ? (x) : (y))
int n, q, segSize, v[MAX_N], seg[MAX_LOG][MAX_N];
int loga(int x) {
if (x) {
return 1 + log(x >> 1);
} else {
return -1;
}
}
int main(void) {
FILE *fin = fopen("rmq.in", "r");
FILE *fout = fopen("rmq.out", "w");
int n, m;
fscanf(fin, "%d %d\n", &n, &m);
int i, j;
for (i = 0; i < n; i++) {
fscanf(fin, "%d", &v[i]);
}
for (i = 0; i < n; i++) {
seg[0][i] = v[i];
}
for (i = 1; (1 << i) < n; i++) {
for (j = 0; j + (1 << i) <= n; j++) {
seg[i][j] = min(seg[i - 1][j], seg[i - 1][j + (1 << (i - 1))]);
}
}
for (i = 0; i < m; i++) {
int x, y;
fscanf(fin, "%d %d", &x, &y);
int width = log(y - x + 1);
int m = min(seg[width][x - 1], seg[width][y - (1 << width)]);
fprintf(fout, "%d\n", m);
}
fclose(fin);
}