#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
int arr[MAXN], lj[MAXN][18], rj[MAXN][18];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int N, K, Q; cin >> N >> K >> Q;
for (int i = 1; i <= N; i++) cin >> arr[i];
vector<int> st;
for (int i = 1; i <= N; i++){
while (!st.empty() && arr[st.back()] < arr[i]) st.pop_back();
lj[i][0] = (st.empty() ? 1 : st.back());
st.push_back(i);
}
st.clear();
for (int i = N; i >= 1; i--){
while (!st.empty() && arr[st.back()] < arr[i]) st.pop_back();
rj[i][0] = (st.empty() ? N : st.back());
st.push_back(i);
}
for (int k = 1; k <= 17; k++)
for (int i = 1; i <= N; i++){
int pl = lj[i][k - 1], pr = rj[i][k - 1];
lj[i][k] = min(lj[pl][k - 1], lj[pr][k - 1]);
rj[i][k] = max(rj[pl][k - 1], rj[pr][k - 1]);
}
while (Q--){
int le, re, ans = 0; cin >> le >> re;
if (le > re) swap(le, re);
int l = le, r = le;
for (int k = 17; k >= 0; k--){
int nl = min(lj[l][k], lj[r][k]), nr = max(rj[l][k], rj[r][k]);
if (nr < re){
ans += (1 << k); l = nl, r = nr;
}
}
int targ = r;
l = re; r = re;
for (int k = 17; k >= 0; k--){
int nl = min(lj[l][k], lj[r][k]), nr = max(rj[l][k], rj[r][k]);
if (nl > targ){
ans += (1 << k); l = nl, r = nr;
}
}
cout << ans << '\n';
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |