Pagini recente » Cod sursa (job #2106375) | Cod sursa (job #579430) | Cod sursa (job #659826) | Cod sursa (job #2305024) | Cod sursa (job #2029296)
#include <cstdio>
#define MAX_N 100000
#define LOG 18
int N, M;
int rmq[LOG][MAX_N + 1];
int lg[MAX_N + 1];
int MIN(int X, int Y) {
return X < Y ? X : Y;
}
void init() {
int i;
lg[1] = 0;
for (i = 2; i <= N; i++) {
lg[i] = lg[i >> 1] + 1;
}
}
int main(void) {
int i;
FILE *f = fopen("rmq.in", "r");
fscanf(f, "%d %d", &N, &M);
init();
for (i = 1; i <= N; i++) {
fscanf(f, "%d", &rmq[0][i]);
}
int u;
for (i = 1; i <= lg[N]; i++) {
for (u = 1; u <= N; u++) {
rmq[i][u] = MIN(rmq[i - 1][u], rmq[i - 1][u + (1 << (i - 1))]);
}
}
freopen("rmq.out", "w", stdout);
int x, y, curr;
while (M) {
fscanf(f, "%d %d", &x, &y);
curr = lg[y - x + 1];
fprintf(stdout, "%d\n", MIN(rmq[curr][x], rmq[curr][y - (1 << curr) + 1]));
M--;
}
fclose(f);
fclose(stdout);
return 0;
}