Pagini recente » Cod sursa (job #2097549) | Cod sursa (job #918528) | Cod sursa (job #2307628) | Cod sursa (job #631784) | Cod sursa (job #3306949)
#include <bits/stdc++.h>
using namespace std;
constexpr int NMAX = 2e5, LOGN = 20;
int n, v[NMAX + 1];
long long spt[LOGN + 1][NMAX + 1];
void init_spt() {
copy(v, v + n + 1, spt[0]);
for (int i = 1; i <= LOGN; i++) {
for (int j = 1; j + (1 << i) - 1 <= n; j++) {
spt[i][j] = min(spt[i - 1][j], spt[i - 1][j + (1 << (i - 1))]);
}
}
}
long long query(int a, int b) {
long long minimum = LLONG_MAX;
for (int i = LOGN; i >= 0; i--) {
if ((1 << i) > b - a + 1)
continue;
minimum = min(minimum, spt[i][a]);
a += 1 << i;
}
return minimum;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int q;
cin >> n >> q;
for (int i = 1; i <= n; i++) {
cin >> v[i];
}
init_spt();
while (q--) {
int a, b;
cin >> a >> b;
cout << query(a, b) << '\n';
}
}