Pagini recente » Cod sursa (job #1902176) | Cod sursa (job #301138) | Cod sursa (job #805318) | Cod sursa (job #1485431) | Cod sursa (job #2368394)
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define NMAX 100005
FILE * f = fopen("rmq.in", "r");
FILE * g = fopen("rmq.out", "w");
int n, m, i, x, y;
int v[NMAX], s[NMAX][20];
void precalc() {
int i, j, l = 1;
for(i = 1; i <= n; i++) s[i][0] = v[i];
for(j = 1; l*2 <= n; j++) {
l *= 2;
for(i = 1; i + l - 1 <= n; i++)
s[i][j] = min(s[i + l/2][j - 1], s[i][j - 1]);
}
}
int rmq(int x, int y) {
int k = log2(y - x + 1);
return min(s[y - (1 << k) + 1][k], s[x][k]);
}
int main() {
fscanf(f, "%d%d", &n, &m);
for(i = 1; i <= n; i++) fscanf(f, "%d", &v[i]);
precalc();
for(i = 1; i <= m; i++) {
fscanf(f, "%d%d", &x, &y);
fprintf(g, "%d\n", rmq(x, y));
}
fclose(f); fclose(g);
return 0;
}