Submission #410970

#TimeUsernameProblemLanguageResultExecution timeMemory
410970Kevin_Zhang_TW고대 책들 (IOI17_books)C++17
50 / 100
154 ms8132 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define pb emplace_back #define AI(i) begin(i), end(i) template<class T> bool chmin(T &a, T b) { return b < a && (a = b, true); } template<class T> bool chmax(T &a, T b) { return a < b && (a = b, true); } #ifdef KEV #define DE(args...) kout("[ " + string(#args) + " ] = ", args) void kout() { cerr << endl; } template<class T, class ...U> void kout(T a, U ...b) { cerr << a << ' ', kout(b...); } void debug(auto l, auto r) { while (l != r) cerr << *l << " \n"[next(l)==r], ++l; } #else #define DE(...) 0 #define debug(...) 0 #endif #include "books.h" long long minimum_walk(std::vector<int> p, int s) { int n = p.size(); ll res = 0; for (int i = 0;i < n;++i) res += abs(i - p[i]); if (res == 0) return 0; int L = 0, R = n-1; while (p[L] == L) ++L; while (p[R] == R) --R; chmax(R, s), chmin(L, s); auto expand = [&](int &l, int &r) { int nl = l, nr = r; auto upd = [&](int pos) { chmax(nr, p[pos]); chmin(nl, p[pos]); }; upd(l), upd(r); while (nl != l || nr != r) { while (l > nl) { upd(--l); } while (r < nr) { upd(++r); } } }; int l = s, r = s; expand(l, r); while (l != L || r != R) { int costl = 0, costr = 0; int nl = l, nr = r; bool sig = false; { int sl = l, sr = r; while (sl > L && sr <= r) { expand(--sl, sr); costl += 2; } if (sr <= r) { sig = true; assert(sl == L); } chmin(nl, sl); chmax(nr, sr); } { int sl = l, sr = r; while (sl >= l && sr < R) { expand(sl, ++sr); costl += 2; } if (sl >= l) { sig = true; assert(sr == R); } chmin(nl, sl); chmax(nr, sr); } if (sig) res += costl + costr; else res += min(costl, costr); l = nl, r = nr; } return res; }
#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...