Pagini recente » Cod sursa (job #3330449) | Cod sursa (job #444019) | Cod sursa (job #790346) | Cod sursa (job #3355848) | Cod sursa (job #3330541)
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n, m;
cin >> n >> m;
vector<int> input(n);
for (auto &x : input)
cin >> x;
int max_lg = __lg(n);
vector<vector<int>> rmq(max_lg + 1);
rmq[0] = move(input);
for (int k = 0; k < max_lg; k++)
{
int len = 1 << k;
vector<int> vec(n - (len<<1) + 1);
for (int j = 0; auto& elem : vec)
{
elem = min(rmq[k][j], rmq[k][j + len]);
j++;
}
rmq[k + 1] = move(vec);
}
while (m--)
{
int a, b;
cin >> a >> b;
int len = b - a + 1;
int len_lg = __lg(len);
cout << min(rmq[len_lg][a], rmq[len_lg][b - (1<<len_lg)]) << '\n';
}
}