제출 #570109

#제출 시각아이디문제언어결과실행 시간메모리
570109Cyber_Wolf밀림 점프 (APIO21_jumps)C++14
37 / 100
4022 ms24612 KiB
#include "jumps.h" //#include "stub.cpp" #include <bits/stdc++.h> using namespace std; #define lg long long const lg sz = 2e5+5; vector<lg> adj[sz]; bool flag = true; void init(int N, std::vector<int> H) { vector<lg> loc(N+1); for(int i = 0; i < N; i++) { flag &= (H[i] == i+1); loc[H[i]] = i; } if(flag) return; set<lg> se; se.emplace(loc[N]); for(int i = N-1; i >= 1; i--) { auto it = se.lower_bound(loc[i]); if(it != se.end()) adj[loc[i]].push_back(*it); if(it != se.begin()) adj[loc[i]].push_back(*(--it)); se.emplace(loc[i]); } /* for(int i = 0; i < N; i++) { for(auto it : adj[i]) { cout << it << ' '; } cout << '\n'; }*/ } lg vis[sz], tmp; int minimum_jumps(int A, int B, int C, int D) { if(flag) { return C-B; } tmp++; lg ans = -1; queue<lg> q; for(int i = A; i <= B; i++) q.push(i), vis[i] = true; lg dist = 0; while(q.size() && ans == -1) { lg sz = q.size(); dist++; while(sz-- && ans == -1) { lg u = q.front(); q.pop(); for(auto it : adj[u]) { if(vis[it] == tmp) continue; if(it >= C && it <= D) { ans = dist; break; } vis[it] = tmp; q.push(it); } } } 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...