Pagini recente » Cod sursa (job #459963) | Cod sursa (job #3259696) | Cod sursa (job #3162578) | Cod sursa (job #2905356) | Cod sursa (job #3146384)
#include <stdio.h>
#define NMAX 100002
#define LOGMAX 17
int tabel[NMAX][LOGMAX];
int v[NMAX];
int lg2[NMAX];
int n, lg;
static inline int f(int x, int y) {
if (x<y) {
return x;
}
return y;
}
void calclg2() {
int i;
lg2[0] = lg2[1] = 0;
for (i=2; i<=n; i++) {
lg2[i] = lg2[i/2]+1;
}
lg = lg2[n];
}
void build() {
int i, p;
for (i=0; i<n; i++) {
tabel[i][0] = v[i];
}
for (p=1; p<=lg; p++) {
for (i=0; i+(1<<p)-1<n; i++) {
tabel[i][p] = f(tabel[i][p-1], tabel[i+(1<<(p-1))][p-1]);
}
}
}
int query(int st, int dr) {
int lung, log, rez;
lung = dr-st+1;
log = lg2[lung];
rez = f(tabel[st][log], tabel[dr-(1<<log)+1][log]);
return rez;
}
int main() {
FILE *fin, *fout;
fin = fopen("rmq.in", "r");
fout = fopen("rmq.out", "w");
int m, rez, i, a, b;
fscanf(fin, "%d%d", &n, &m);
for (i=0; i<n; i++) {
fscanf(fin, "%d", &v[i]);
}
calclg2();
build();
for (i=0; i<m; i++) {
fscanf(fin, "%d%d", &a, &b);
a--;
b--;
rez = query(a, b);
fprintf(fout, "%d\n", rez);
}
fclose(fin);
fclose(fout);
return 0;
}