Pagini recente » Cod sursa (job #2883280) | Cod sursa (job #2622239) | Cod sursa (job #2884314) | Cod sursa (job #3281502) | Cod sursa (job #2901779)
#include <fstream>
const int MAX = 100000;
const int LOGMAX = 18;
long long lg[2 + MAX], h[2 + MAX], rmq[2 + LOGMAX][2 + MAX];
long long sum[2 + MAX];
std::ifstream fin("rmq.in");
std::ofstream fout("rmq.out");
int main() {
int n, nrQueries;
fin >> n >> nrQueries;
sum[0] = 0;
for (int i = 1; i <= n; i++) {
long long l;
fin >> h[i];
//std::cin >> l >> h[i];
// sum[i] = 1LL * (sum[i - 1] + 1LL * l);
}
lg[1] = 0;
for (int i = 2; i <= n; i++)
lg[i] = lg[i / 2] + 1;
for (int i = 1; i <= n; i++)
rmq[0][i] = h[i];
for (int i = 1; (1 << i) <= n; i++)
for (int j = 1; j <= n - (1 << i) + 1; j++) {
int l = 1 << (i - 1);
rmq[i][j]= std::min(rmq[i - 1][j], rmq[i - 1][j + l]);
}
// int nrQueries;
// fin >> nrQueries;
for (int i = 1; i <= nrQueries; i++) {
long long l, r;
fin >> l >> r;
long long diff = r - l + 1;
long long log = lg[diff];
long long sh = diff - (1 << log);
fout << 1LL * (std::min(rmq[log][l], rmq[log][l + sh])) << '\n'; //* 1LL * (sum[r] - sum[l - 1]) << '\n';
}
return 0;
}