Submission #744727

#TimeUsernameProblemLanguageResultExecution timeMemory
744727t6twotwoRainforest Jumps (APIO21_jumps)C++17
4 / 100
4081 ms15132 KiB
#include "jumps.h" #include <bits/stdc++.h> using namespace std; int N; vector<int> H, G; bool subtask1; vector<vector<int>> adj; void init(int n, vector<int> h) { N = n, H = h; subtask1 = 1; for (int i = 0; i < N; i++) { H[i]--; if (i != H[i]) { subtask1 = 0; } } G.resize(N); for (int i = 0; i < N; i++) { G[H[i]] = i; } adj.resize(N); vector<int> stk; for (int i = N - 1; i >= 0; i--) { while (!stk.empty() && G[stk.back()] < G[i]) { stk.pop_back(); } if (!stk.empty()) { adj[i].push_back(stk.back()); } stk.push_back(i); } stk.clear(); for (int i = N - 1; i >= 0; i--) { while (!stk.empty() && G[stk.back()] > G[i]) { stk.pop_back(); } if (!stk.empty()) { adj[i].push_back(stk.back()); } stk.push_back(i); } } int minimum_jumps(int A, int B, int C, int D) { if (subtask1) { return C - B; } vector<int> dp(N, N); for (int i = 0; i < N; i++) { if (A <= G[i] && G[i] <= B) { dp[i] = 0; } for (int j : adj[i]) { dp[j] = min(dp[j], dp[i] + 1); } } int ans = N; for (int i = C; i <= D; i++) { ans = min(ans, dp[H[i]]); } if (ans == N) { ans = -1; } 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...