//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... |