#include "jumps.h"
#include <bits/stdc++.h>
using namespace std;
#define maxs(a, b) (a = max(a, b))
const int MXN = 2e5+5;
int n, a[MXN], L[MXN], R[MXN];
void init(int N, vector<int> H) {
n = N;
a[0] = a[n+1] = 1e9;
for(int i=1; i<=n; i++) {
a[i] = H[i-1];
for(L[i]=i-1; a[L[i]]<=a[i]; L[i]=L[L[i]]);
}
for(int i=n; i>=1; i--)
for(R[i]=i+1; a[R[i]]<=a[i]; R[i]=R[R[i]]);
}
int minimum_jumps(int A, int B, int C, int D) {
A++; B++; C++; D++;
int mx1=0, mx2=0;
for(int i=B; i<C; i++) maxs(mx1, a[i]);
for(int i=C; i<=D; i++) maxs(mx2, a[i]);
if(mx1>mx2) return -1;
int lst=B, v=B;
for(int i=B-1; i>=A; i--)
if(a[i]>a[lst]) {
lst = i;
if(a[i]<mx2) v = i;
}
int ans = 0;
while(1) {
ans++;
if(R[v]>=C) break;
if(a[L[v]]>mx2) v = R[v];
else if(a[L[v]]>a[R[v]]) v = L[v];
else v = R[v];
}
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... |