Pagini recente » Cod sursa (job #2900642) | Cod sursa (job #2840188) | Cod sursa (job #1845535) | Cod sursa (job #2838706) | Cod sursa (job #3356102)
#include <fstream>
#include <iterator>
#include <vector>
std::ifstream f ("rmq.in");
std::ofstream g ("rmq.out");
const int MAXN = 1e5 + 1;
const int K = 17;
int st[K + 1][MAXN];
int main() {
int n, m;
f >> n >> m;
std::vector<int> a(n, 0);
for (int i = 0; i < n; ++i) {
f >> a[i];
}
int lg[MAXN+1];
lg[1] = 0;
for (int i = 2; i <= MAXN; i++)
lg[i] = lg[i/2] + 1;
std::copy(a.begin(), a.end(), st[0]);
for (int i = 1; i <= K; ++i)
for (int j = 0; j + (1 << i) <= n; ++j)
st[i][j] = std::min(st[i - 1][j], st[i - 1][j + (1 << (i - 1))]);
int l, r;
for (int i = 0; i < m; ++i) {
f >> l >> r;
int idx = lg[r - l + 1];
int mini = std::min(st[idx][l - 1], st[idx][r - (1 << idx)]);
g << mini << "\n";
}
return 0;
}