Submission #1035214

#TimeUsernameProblemLanguageResultExecution timeMemory
1035214_8_8_Rainforest Jumps (APIO21_jumps)C++17
0 / 100
4033 ms87972 KiB
#include "jumps.h" #include <vector> #include <bits/stdc++.h> using namespace std; const int B = 20; int n; vector<vector<int>> build(vector<vector<int>> g,vector<int>rt){ vector<vector<int>> up(n+1); function<void(int,int )> dfs = [&](int v,int pr) { up[v].resize(B); up[v][0] = pr; for(int i = 1;i < B;i++){ up[v][i] = up[up[v][i - 1]][i - 1]; } for(int to:g[v]) { dfs(to,v); } }; for(int i:rt) { dfs(i,i); } return up; } vector<vector<int>> up,up1; void init(int N, vector<int> H) { n = N; vector<int> st,rt; vector<vector<int>> G(n); for(int i = 0;i < N;i++) { while(!(int)st.empty() && H[st.back()] < H[i]) { st.pop_back(); } if(st.empty()){ rt.push_back(i); }else { G[st.back()].push_back(i); } st.push_back(i); } up = build(G,rt); for(int i = 0;i < n;i++){ G[i].clear(); } rt.clear(); st.clear(); for(int i = N - 1;i >= 0;i--){ while(!st.empty() && H[st.back()] < H[i]){ st.pop_back(); } if(st.empty()){ rt.push_back(i); }else{ G[st.back()].push_back(i); } st.push_back(i); } up1 = build(G,rt); } int check(int ver,int C,int D){ int res =0; for(int i = B - 1;i >= 0;i--){ if(up1[ver][i] < C){ ver = up1[ver][i]; res += (1 << i); } } res++; ver = up1[ver][0]; return (ver >= C && ver <= D ? res : -1); } int minimum_jumps(int A, int B, int C, int D) { int ver = B,res = (int)1e9; for(int i = A;i <= B;i++){ int c = check(i,C,D); if(c != -1){ res = min(res,c); } } if(res == (int)1e9){ res = -1; } // for(int i = B - 1;i >= 0;i--){ // if(up[ver][i] >= A && check(ver,C,D) != -1){ // ver = up[ver][i]; // } // } return res; }

Compilation message (stderr)

jumps.cpp: In function 'int minimum_jumps(int, int, int, int)':
jumps.cpp:74:9: warning: unused variable 'ver' [-Wunused-variable]
   74 |     int ver = B,res = (int)1e9;
      |         ^~~
#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...