Pagini recente » Cod sursa (job #2778339) | Cod sursa (job #1358030) | Cod sursa (job #1048632) | Cod sursa (job #3222486) | Cod sursa (job #1149286)
#include <cstdio>
#define INF 100001
#define Nmax 100000
#define logNmax 18
using namespace std;
inline int log2(int val) {
return 31 - __builtin_clz(val);
}
inline int min(int a, int b) {
if (a < b) {
return a;
} else {
return b;
}
}
int main() {
FILE * fr = fopen("rmq.in", "r");
FILE * fw = fopen("rmq.out", "w");
int n, q, i, j;
int b[logNmax][Nmax];
fscanf(fr, "%d %d", &n, &q);
for (i = 0; i < n; ++i) {
fscanf(fr, "%d", &b[0][i]);
}
int k = log2(n);
for (i = 1; i <= k; ++i) {
for (j = 0; j < n && j+(1<<(i-1)) < n; j++) {
b[i][j] = min(b[i-1][j], b[i-1][j+(1<<(i-1))]);
}
}
int st, dr, ret;
for (i = 0; i < q; ++i) {
fscanf(fr, "%d%d", &st, &dr);
--st; --dr;
k = log2(dr-st+1);
ret = min(b[k][st], b[k][dr-(1<<k)+1]);
fprintf(fw, "%d\n", ret);
}
return 0;
}