Pagini recente » Cod sursa (job #1759075) | Cod sursa (job #1252218)
#include <stdio.h>
#include <stdlib.h>
#define N_MAX 100000
#define L_MAX 16
inline int min(int a, int b)
{
return a < b ? a : b;
}
int size(int k)
{
if (k) {
return 1 + size(k >> 1);
} else {
return 0;
}
}
int v[N_MAX], loc[L_MAX][N_MAX];
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++) {
loc[0][i] = v[i];
}
for (i = 1; (1 << i) < N; i++) {
for (j = 0; j + (1 << i) <= N; j++) {
loc[i][j] = min(loc[i - 1][j], loc[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(loc[width][x - 1], loc[width][y - (1 << width)]);
fprintf(fout, "%d\n", m);
}
fclose(fin);
fclose(fout);
}