Submission #766528

#TimeUsernameProblemLanguageResultExecution timeMemory
766528NK_Group Photo (JOI21_ho_t3)C++17
100 / 100
316 ms460 KiB
// Success consists of going from failure to failure without loss of enthusiasm #include <bits/stdc++.h> using namespace std; #define nl '\n' template<class T> using V = vector<T>; struct BIT { int N; V<int> data; void init(int n) { N = n; data = V<int>(N, 0); } void add(int p, int x) { for(++p;p<=N;p+=p&-p) data[p-1] += x; } int sum(int l, int r) { return sum(r+1) - sum(l); } int sum(int r) { int s = 0; for(;r;r-=r&-r) s += data[r-1]; return s; } }; const int INF = 1e9 + 10; int main() { cin.tie(0)->sync_with_stdio(0); int N; cin >> N; V<int> A(N); for(auto& x : A) cin >> x; V<int> dp(N+1, INF); dp[0] = 0; for(int x = 0; x <= N; x++) { BIT B; B.init(N+1); V<int> amt(N+1); int seen = 0; for(int i = 0; i < N; i++) if (A[i] > x) { int R = N - i - 1; int lx = R - (N - x - seen - 1); int l = R - (N - A[i] - B.sum(A[i], N)); // cout << seen << " " << l << " " << lx << endl; amt[A[i]] = seen - (l - lx); // cout << A[i] << " " << amt[A[i]] << endl; B.add(A[i], 1); seen++; } int cost = dp[x]; // cout << "X: " << x << " " << cost << endl; for(int i = x + 1; i <= N; i++) { cost += amt[i]; // cout << i << " " << cost << endl; dp[i] = min(dp[i], cost); } // cout << endl; } cout << dp[N] << nl; return 0; }
#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...