Pagini recente » Cod sursa (job #1851529) | Cod sursa (job #989332) | Cod sursa (job #3001018) | Cod sursa (job #496192) | Cod sursa (job #1672512)
#include <stdio.h>
#define Nadejde 100000
#define Smerenie 16
int N, M;
int log[Nadejde + 1];
int shl[Smerenie + 1];
int rmq[Smerenie + 1][Nadejde + 1];
int MIN(int X, int Y) {
return X < Y ? X : Y;
}
void init() {
int i;
for (i = 0; i <= Smerenie; i++) {
shl[i] = (1 << i);
}
for (i = 1; i <= Nadejde; i++) {
log[i] = log[i >> 1] + 1;
}
}
int main(void) {
int i, j, b, e;
FILE *f = fopen("rmq.in", "r");
/* Precalculare. */
init();
/* Citirea datelor. */
fscanf(f, "%d %d", &N, &M);
for (i = 1; i <= N; i++) {
fscanf(f, "%d", &rmq[0][i]);
}
/* Programare dinamica. */
for (j = 1; j <= Smerenie; j++) {
for (i = 1; i + shl[j] - 1 <= N; i++) {
rmq[j][i] = MIN(rmq[j - 1][i], rmq[j - 1][i + shl[j - 1]]);
}
}
/* Raspunde la intrebari. */
for (i = 1; i <= M; i++) {
fscanf(f, "%d %d", &b, &e);
j = log[b - e + 1];
fprintf(stdout, "%d\n", MIN(rmq[j][b], rmq[j][e - shl[j] + 1]));
}
fclose(f);
fclose(stdout);
/// Multumim Doamne!
puts("Doamne ajuta!");
return 0;
}