Submission #622983

#TimeUsernameProblemLanguageResultExecution timeMemory
622983elkernosGroup Photo (JOI21_ho_t3)C++17
100 / 100
424 ms196444 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int32_t main() { cin.tie(0)->sync_with_stdio(0); int n; cin >> n; vector<int> p(n + 1), pr(n + 1); for(int i = 1; i <= n; i++) { cin >> p[i]; pr[p[i]] = i; } vector inv(n + 1, vector<int>(n + 1)); for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { inv[i][j] = inv[i][j - 1] + inv[i - 1][j] - inv[i - 1][j - 1] + (i < j && pr[j] < pr[i]); // j i } } auto c = [&](int l, int r) { return (inv[r][r] - inv[l - 1][r] - inv[r][l - 1] + inv[l - 1][l - 1]); }; auto C2 = [&](int x) { return x * (x - 1) / 2; }; const int oo = 1e18; vector<int> dp(n + 1, oo); dp[0] = 0; for(int i = 1; i <= n; i++) { dp[i] = C2(i) - c(1, i); for(int j = 1; j <= i; j++) { int one = C2(i - j + 1) - c(j, i); int two = c(1, i) - (j == 1 ? 0 : c(1, j - 1)) - c(j, i); dp[i] = min(dp[i], dp[j - 1] + one + two); } } cout << dp[n] << '\n'; }
#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...