Pagini recente » Cod sursa (job #480897) | Cod sursa (job #3347504) | Cod sursa (job #162276) | Cod sursa (job #3137787) | Cod sursa (job #3313239)
#include <iostream>
#include <fstream>
#include <stdint.h>
const int32_t MAX_N = 100000;
const int32_t MAX_N_LOG_2 = 17;
int32_t rmq[MAX_N_LOG_2][MAX_N];
int32_t min(int32_t x, int32_t y) {
return (x < y) ? x : y;
}
int32_t Log2(int32_t val) {
int32_t res = 0;
while((1 << res) <= val)
++res;
return res - 1;
}
int32_t GetMin(int32_t left, int32_t right) {
int32_t len = right - left + 1;
int32_t lenLog2 = Log2(len);
int32_t lenPow2 = 1 << lenLog2;
return min(rmq[lenLog2][left], rmq[lenLog2][right - lenPow2 + 1]);
}
int main() {
std::ifstream fin("rmq.in");
std::ofstream fout("rmq.out");
int32_t n, m;
fin >> n >> m;
for(int32_t i = 0; i != n; ++i)
fin >> rmq[0][i];
int32_t nLog2 = Log2(n);
for(int32_t i = 1; i <= nLog2; ++i) {
for(int32_t j = 0; j <= n - (1 << i); ++j)
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);
}
for(int32_t i = 0; i != m; ++i) {
int32_t a, b;
fin >> a >> b;
--a; --b;
fout << GetMin(a, b) << '\n';
}
fin.close();
fout.close();
return 0;
}