#include "jumps.h"
#include<bits/stdc++.h>
using namespace std;
#define fall(i,a,b) for(int i=a;i<=b;i++)
#define rfall(i,a,b) for(int i=a;i>=b;i--)
#define all(x) x.begin(),x.end()
#define sz(x) (int)x.size()
#define pb push_back
const int MAXN=2e5+10;
int n;
vector<int> g[MAXN];
void init(int N, std::vector<int> H) {
n=N;
stack<int> st;
fall(i,0,n-1){
while(sz(st)){
auto x=st.top();
if(H[x]>H[i]) break;
st.pop();
}
if(sz(st)) g[i].pb(st.top());
st.push(i);
}
while(sz(st)) st.pop();
rfall(i,n-1,0){
while(sz(st)){
auto x=st.top();
if(H[x]>H[i]) break;
st.pop();
}
if(sz(st)) g[i].pb(st.top());
st.push(i);
}
}
int minimum_jumps(int A, int B, int C, int D){
vector<int> dp(n,n+10);
fall(i,A,B) dp[i]=0;
queue<int> fila; fall(i,A,B) fila.push(i);
while(sz(fila)){
auto x=fila.front(); fila.pop();
if(x>=C && x<=D) return dp[x];
for(auto u:g[x]) if(dp[u]==n+10){dp[u]=dp[x]+1;fila.push(u);}
}
return -1;
}