Submission #782248

#TimeUsernameProblemLanguageResultExecution timeMemory
782248ikaurovAncient Books (IOI17_books)C++17
0 / 100
1 ms212 KiB
#include "books.h" #pragma GCC optimize("O3") #include <bits/stdc++.h> using namespace std; #define all(arr) (arr).begin(), (arr).end() #define ll long long #define ld long double #define pb push_back #define sz(x) (int)(x).size() #define fi first #define se second #define endl '\n' long long minimum_walk(std::vector<int> p, int s) { int n = sz(p); ll ans = 0; vector<int> x{0}, sx{0}, sumsz{0}; for (int i = 0; i < n; i++){ ans += abs(i - p[i]); } for (int i = 0, mx = -1; i < n;){ if (i == p[i] && mx < i){ int j = i; while (j < n && j == p[j]) j++; x.pb(j - i); sx.pb(sx.back() + x.back()); sumsz.pb(j); i = j; } else mx = max(mx, p[i]), i++; } x.pb(0); sx.pb(sx.back()); sumsz.pb(sumsz.back()); int m = sz(x); vector<ll> dp(m); ll minval = 0; for (int i = 1; i < m; i++){ dp[i] = minval + sx[i - 1] * 2 + sumsz[i] + x[i]; minval = min(minval, dp[i] - 2 * sx[i] - sumsz[i]); } return ans + dp.back(); }
#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...