Pagini recente » Cod sursa (job #3134257) | Cod sursa (job #2587450) | Cod sursa (job #2615775) | Cod sursa (job #2845248) | Cod sursa (job #2819137)
#include <stdio.h>
#define MAXN 100001
#define MAXLOG 16
int v[MAXN];
int a[MAXN][MAXLOG+1];
int vlog2[MAXN];
void precalclog(int n) {
int i;
vlog2[1] = 0;
for (i=2; i<=n; i++) {
vlog2[i] = vlog2[i/2]+1;
}
}
static inline int minim(int x, int y) {
if (x<y) {
return x;
}
return y;
}
void build(int n) {
int i, p;
for (i=0; i<n; i++) {
a[i][0] = v[i];
}
for (p=1; p<=MAXLOG; p++) {
for (i=0; i+(1<<p)-1 < n; i++) {
a[i][p] = minim(a[i][p-1], a[i+(1<<(p-1))][p-1]);
}
}
}
int query(int st, int dr) {
int lung, log;
lung = st-dr+1;
log = vlog2[lung];
return minim(a[st][log], a[dr-(1<<log)+1][log]);
}
int main() {
FILE *fin, *fout;
fin = fopen("rmq.in", "r");
fout = fopen("rmq.out", "w");
int n, m, i, x, y;
fscanf(fin, "%d%d", &n, &m);
for (i=0; i<n; i++) {
fscanf(fin, "%d", &v[i]);
}
precalclog(n);
build(n);
for (i=0; i<m; i++) {
fscanf(fin, "%d%d", &x, &y);
fprintf(fout, "%d\n", query(x-1, y-1));
}
fclose(fin);
fclose(fout);
return 0;
}