제출 #1291936

#제출 시각아이디문제언어결과실행 시간메모리
1291936Hamed_Ghaffari밀림 점프 (APIO21_jumps)C++20
33 / 100
4083 ms4316 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...