Submission #370962

#TimeUsernameProblemLanguageResultExecution timeMemory
370962KoDAncient Books (IOI17_books)C++17
50 / 100
157 ms19052 KiB
#include <bits/stdc++.h> #include "books.h" template <class T> using Vec = std::vector<T>; long long minimum_walk(Vec<int> p, int s) { assert(s == 0); const int n = (int) p.size(); Vec<bool> done(n); long long ret = 0; Vec<int> add(n); int rightmost = 0; for (int i = 0; i < n; ++i) { ret += std::abs(p[i] - i); if (!done[i]) { if (i != p[i]) { rightmost = i; } int l = n, r = -1; int u = i; while (!done[u]) { l = std::min(l, u); r = std::max(r, u); done[u] = true; u = p[u]; } add[l] += 1; add[r] -= 1; } } for (int i = 1; i < n; ++i) { add[i] += add[i - 1]; } while (rightmost > 0) { rightmost -= 1; ret += 2 * (add[rightmost] == 0 ? 1 : 0); } return ret; }
#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...