#include "jumps.h"
#include <bits/stdc++.h>
using namespace std;
template<typename T>
using vec = vector<T>;
using ll = long long;
ll n;
vec<int> a;
vec<int> jumpRight, jumpLeft;
vec<vec<int>> up;
void init(int N, std::vector<int> H) {
n = N;
a = H;
jumpRight.assign(n,-1);
jumpLeft.assign(n,-1);
up.assign(n,vec<int>(18,-1));
stack<int> st;
for(int i = 0; i < n; ++i) {
while(!st.empty() and a[st.top()] < a[i]) {
jumpRight[st.top()] = i;
st.pop();
}
st.push(i);
}
while(!st.empty()) st.pop();
for(int i = n - 1; i >= 0; --i) {
while(!st.empty() and a[st.top()] < a[i]) {
jumpLeft[st.top()] = i;
st.pop();
}
st.push(i);
}
}
int minimum_jumps(int A, int B, int C, int D) {
assert(A == B && C == D);
int at = A;
int jumpLimit = a[C];
int ans = 0;
while(at != C) {
ans++;
int lj = jumpLeft[at], rj = jumpRight[at];
if(lj < jumpLimit and rj < jumpLimit) {
if(lj >= rj) at = lj;
else at = rj;
}
else if(lj < jumpLimit and rj >= jumpLimit) at = lj;
else if(rj < jumpLimit and lj >= jumpLimit) at = rj;
else break;
}
return (at == C ? ans : -1);
}
# | 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... |