Pagini recente » Cod sursa (job #356114) | Cod sursa (job #2435820) | Cod sursa (job #3211225) | Cod sursa (job #1511205) | Cod sursa (job #2200955)
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m;
int log2(int a) {
int l = 0, x = 1;
while (x <= a) {
x <<= 1;
++l;
}
return (l - 1);
}
int expLog2(int a) {
int x = 1;
while (x <= a) x <<= 1;
return (x >> 1);
}
int minim(int a, int b) {
return ((a < b) ? a : b);
}
int main() {
int i, j, x, y, k, put2, lim;
f >> n >> m;
int len = log2(n) + 1;
int **a = (int **)malloc((n + 1) * sizeof(int *));
for (i = 1; i <= n; ++i)
a[i] = (int *)malloc(len * sizeof(int *));
for (i = 1; i <= n; ++i)
f >> a[i][0];
for (k = 1; k < len; ++k) {
put2 = 1 << k;
lim = n - put2 + 1;
put2 >>= 1;
for (i = 1; i <= lim; ++i) {
a[i][k] = minim(a[i][k - 1], a[i + put2][k - 1]);
}
}
for (j = 0; j < m; ++j) {
f >> x >> y;
lim = y - x + 1;
//if (lim < 0)
// lim = -lim;
//++lim;
put2 = log2(lim);
g << minim(a[x][put2], a[x + lim - (1 << put2)][put2]) << '\n';
}
return 0;
}