#include "jumps.h"
#include <bits/stdc++.h>
using namespace std;\
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vii;
typedef pair<int,int> pi;
typedef vector<pi> pii;
typedef tuple<int,int,int> tii;
typedef vector<ll> li;
typedef vector<li> lii;
#define REP(i,a,b) for(int i=a;i<b;i++)
#define F first
#define S second
#define PB push_back
#define LSOne(s) ((s)&(-s))
const ll INF=1000000000000000010;
const int inf=1e9+10;
const ll M=1e9+7;
vii a;
int n;
void init(int N, std::vector<int> H) {
n=N;
a.resize(n);
stack<pi> st;
st.push({H[0],0});
REP(i,1,n){
if(st.top().F<H[i]){
while(!st.empty()&&st.top().F<H[i]){
a[st.top().S].PB(i);
st.pop();
}
}
st.push({H[i],i});
}
st=stack<pi>();
st.push({H[n-1],n-1});
for(int i=n-2;i>=0;i--){
if(st.top().F<H[i]){
while(!st.empty()&&st.top().F<H[i]){
a[st.top().S].PB(i);
st.pop();
}
}
st.push({H[i],i});
}
}
int minimum_jumps(int A, int B, int C, int D) {
vi vis(n,0),dis(n,inf);
queue<int> q;
REP(i,A,B+1){
q.push(i);
dis[i]=0;
}
while(!q.empty()){
int x=q.front();
q.pop();
if(vis[x])continue;
vis[x]=1;
for(auto u:a[x]){
if(!vis[u]){
q.push(u);
dis[u]=min(dis[u],dis[x]+1);
}
}
}
int ans=inf;
REP(i,C,D+1)ans=min(ans,dis[i]);
if(ans==inf)return -1;
return ans;
}
# | 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... |