제출 #981367

#제출 시각아이디문제언어결과실행 시간메모리
981367Muhammad_Aneeq밀림 점프 (APIO21_jumps)C++17
4 / 100
4054 ms12080 KiB
#include "jumps.h" #include <vector> #include <set> #include <cmath> #include <iostream> #include <deque> #include <algorithm> using namespace std; int const N=2e5+10,LG=20; int mx[N][LG]={}; int nextmx[N]={},premx[N]={}; bool vis[N]={}; vector<vector<int>>ans; int ind[N]={}; bool uni=0; void init(int N,vector<int> H) { uni=is_sorted(begin(H),end(H)); deque<int>d; for (int i=0;i<N;i++) { nextmx[i]=-1; if (d.empty()) { d.push_front(i); continue; } while (d.size()&&H[d.front()]<H[i]) { nextmx[d.front()]=i; d.pop_front(); } d.push_front(i); } d={}; for (int i=N-1;i>=0;i--) { premx[i]=-1; if (d.empty()) { d.push_front(i); continue; } while (d.size()&&H[d.front()]<H[i]) { premx[d.front()]=i; d.pop_front(); } d.push_front(i); } for (int i=0;i<N;i++) { if (!vis[i]) { int z=i; vis[z]=1; ans.push_back({z}); ind[z]=ans.size()-1; while (nextmx[z]!=-1&&!vis[nextmx[z]]) { z=nextmx[z]; vis[z]=1; ans.back().push_back(z); ind[z]=ans.size()-1; } } } } int minimum_jumps(int A, int B, int C, int D) { if (uni) return C-B; int minsteps=1e9+10; for (int i=A;i<=B;i++) { int ex=0; int z=i; while (z!=-1) { if (ex>minsteps) break; int cnt=ex++; int prez=z; while (ans[ind[z]].back()<C&&z!=-1) { cnt+=ans[ind[z]].size()-(lower_bound(begin(ans[ind[z]]),end(ans[ind[z]]),z)-begin(ans[ind[z]])); if (nextmx[ans[ind[z]].back()]==-1) { cnt=1e9+10; break; } z=nextmx[ans[ind[z]].back()]; } if (z==-1||cnt==1e9+10) { z=premx[prez]; continue; } int f=lower_bound(begin(ans[ind[z]]),end(ans[ind[z]]),C)-begin(ans[ind[z]]); if (ans[ind[z]][f]<=D) { int g=lower_bound(begin(ans[ind[z]]),end(ans[ind[z]]),z)-begin(ans[ind[z]]); cnt+=f-g; minsteps=min(cnt,minsteps); } z=premx[prez]; } } if (minsteps==1e9+10) return -1; return minsteps; }
#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...