Pagini recente » Cod sursa (job #965119) | Cod sursa (job #2969242) | Cod sursa (job #2095408) | Cod sursa (job #1630820) | Cod sursa (job #3242808)
#include <bits/stdc++.h>
using namespace std;
const int max_N = 100005;
int t[max_N + 5];
int N;
void build(vector<int> &v) {
for (int i = 0; i < v.size(); i++) {
t[i + N] = v[i];
}
int start = N / 2;
int end = N;
while (start > 0) {
for (int i = start - 1; i < end; i++) {
t[i] = min(t[i * 2], t[i * 2 + 1]);
}
start /= 2;
end /= 2;
}
}
int query(int l, int r) {
l += N - 1;
r += N - 1;
int res = 1e9;
while (l <= r) {
if (l % 2 == 1) {
res = min(res, t[l]);
l++;
}
if (r % 2 == 0) {
res = min(res, t[r]);
r--;
}
l /= 2;
r /= 2;
}
return res;
}
int main() {
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int Q;
cin >> N >> Q;
vector<int> v(N);
for (auto &c : v) {
cin >> c;
}
build(v);
while (Q--) {
int l, r;
cin >> l >> r;
cout << query(l, r) << '\n';
}
return 0;
}