Submission #552366

#TimeUsernameProblemLanguageResultExecution timeMemory
552366cig32밀림 점프 (APIO21_jumps)C++17
33 / 100
4062 ms4384 KiB
#include "jumps.h" #include <stack> #include <vector> #include <iostream> #include <queue> const int MAXN = 200010; int L[MAXN], R[MAXN]; int N_; void init(int N, std::vector<int> H) { N_ = N; for(int i=0; i<N; i++) { L[i] = R[i] = -1; } std::stack<int> st; for(int i=0; i<N; i++) { while(st.size() && H[st.top()] < H[i]) { st.pop(); } if(st.size()) L[i] = st.top(); st.push(i); } while(st.size()) st.pop(); for(int i=N-1; i>=0; i--) { while(st.size() && H[st.top()] < H[i]) { st.pop(); } if(st.size()) R[i] = st.top(); st.push(i); } while(st.size()) st.pop(); } int minimum_jumps(int A, int B, int C, int D) { int N = N_; int ans = 1e9; int dist[N]; bool vis[N]; for(int i=0; i<N; i++) dist[i] = 1e9, vis[i] = 0; for(int i=A; i<=B; i++) dist[i] = 0; std::queue<int> q; for(int i=A; i<=B; i++) q.push(i); while(q.size()) { int f = q.front(); q.pop(); if(vis[f]) continue; vis[f] = 1; if(L[f] != -1 && !vis[L[f]] && dist[L[f]] > dist[f] + 1) { dist[L[f]] = dist[f] + 1; q.push(L[f]); } if(R[f] != -1 && !vis[R[f]] && dist[R[f]] > dist[f] + 1) { dist[R[f]] = dist[f] + 1; q.push(R[f]); } } for(int i=C; i<=D; i++) ans = std::min(ans, dist[i]); return (ans == 1e9 ? -1 : ans); } /* Compilation: ./compile_sh ./jumps */
#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...