Submission #921041

#TimeUsernameProblemLanguageResultExecution timeMemory
921041siewjhAncient Books (IOI17_books)C++17
50 / 100
126 ms29244 KiB
#include "books.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; ll minimum_walk(vector<int> p, int s) { int nums = p.size(); vector<int> cyc(nums, -1); ll ans = 0; int mn = s, mx = s; vector<pair<int, int>> ranges; for (int i = 0; i < nums; i++) if (cyc[i] == -1){ int curr = i, cmn = i, cmx = i; do{ ans += abs(curr - p[curr]); cyc[curr] = i; cmn = min(cmn, curr); cmx = max(cmx, curr); curr = p[curr]; } while (curr != i); ranges.push_back({cmn, cmx}); if (p[i] != i){ mn = min(mn, cmn); mx = max(mx, cmx); } } sort(ranges.begin(), ranges.end()); int cmx = -1; ll cnt = 0; for (auto &[l, r] : ranges){ if (l < mn) continue; if (l > mx) break; if (l > cmx) cnt++; cmx = max(cmx, r); } return ans + (cnt - 1) * 2; }
#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...