//chockolateman
#include<bits/stdc++.h>
using namespace std;
int n,l[200005],r[200005],dist[2005][2005],st[2005][8005];
bool used[200005];
void BFS(int start)
{
    memset(used,false,sizeof(used));
    queue<int> q;
    used[start] = true;
    dist[start][start] = 0;
    q.push(start);
    while(!q.empty())
    {
        int v = q.front();
        q.pop();
        for(int u,k = 0 ; k <= 1 ; k++)
        {
            if(k==0)
                u = l[v];
            else
                u = r[v];
            if(1 <= u && u <= n && !used[u])
            {
                used[u] = true;
                dist[start][u] = dist[start][v] + 1;
                q.push(u);
            }
        }
    }
}
void build(int t,int v = 1,int start = 1,int end = n)
{
    if(start==end)
    {
        if(!used[start])
            st[t][v] = 1e9;
        else
            st[t][v] = dist[t][v];
        return;
    }
    int mid = (start + end)/2;
    build(t,2*v,start,mid);
    build(t,2*v+1,mid + 1,end);
    st[t][v] = min(st[t][2*v],st[t][2*v+1]);
}
int query(int t,int left,int right,int v = 1,int start = 1,int end = n)
{
    if(start==left && end==right)
        return st[t][v];
    int mid = (start + end)/2;
    if(right <= mid)
        return query(t,left,right,2*v,start,mid);
    else if(left > mid)
        return query(t,left,right,2*v+1,mid+1,end);
    else
        return min(query(t,left,mid,2*v,start,mid),query(t,mid+1,right,2*v+1,mid+1,end));
}
void init(int N, std::vector<int> H) {
    n = N;
    stack<pair<int,int>> order;
    order.push({1e9,0});
    for(int i = 1 ; i <= N ; i++)
    {
        while(H[i-1] > order.top().first)
            order.pop();
        l[i] = order.top().second;
        order.push({H[i-1],i});
    }
    while(!order.empty())
        order.pop();
    order.push({1e9,N+1});
    for(int i = N ; i >= 1 ; i--)
    {
        while(H[i-1] > order.top().first)
            order.pop();
        r[i] = order.top().second;
        order.push({H[i-1],i});
    }
    for(int i = 1 ; i <= N ; i++)
    {
        BFS(i);
        build(i);
    }
}
int minimum_jumps(int A, int B, int C, int D) {
    int ret = 1e9;
    A++;
    B++;
    C++;
    D++;
    for(int v = A ; v <= B ; v++)
        ret = min(ret,query(v,C,D));
    if(ret > n)
        ret = -1;
    return ret;
}
| # | 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... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |