Pagini recente » Cod sursa (job #1391396) | Cod sursa (job #1428107) | Cod sursa (job #1982551) | Cod sursa (job #2661388) | Cod sursa (job #500942)
Cod sursa(job #500942)
#include <stdio.h>
#include <math.h>
long n, m, i, put, j, rMq[20][100010], st, en, p, val;
inline long min(long a, long b) {
if (a < b)
return a;
return b;
}
int main() {
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%ld %ld", &n, &m);
for (i = 1; i <= n; ++i) {
scanf("%ld", &rMq[1][i]);
}
for (i = 2, put = 2; put <= n; ++i, put <<= 1) {
for (j = 1; j <= n; ++j) {
long aux = 0;
if (j + (put / 2) <= n) aux = rMq[i - 1][j + (put / 2)];
else aux = 2000000000;
rMq[i][j] = min(rMq[i - 1][j], aux);
}
}
for (i = 1; i <= m; ++i) {
scanf("%ld %ld", &st, &en);
p = 1;
val = 0;
while (p * 2 <= (en - st + 1)) {p *= 2;++val;}
printf("%ld\n", min(rMq[val + 1][st], rMq[val + 1][en - p + 1]));
}
return 0;
}