Submission #784773

#TimeUsernameProblemLanguageResultExecution timeMemory
784773borisAngelovGroup Photo (JOI21_ho_t3)C++17
64 / 100
5063 ms452 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 5005; const int inf = 1e9; int n; int p[maxn]; int pos[maxn]; int dp[maxn]; int tree_original[maxn]; void update_original(int idx, int val) { for (int i = idx; i <= n; i += (i & (-i))) { tree_original[i] += val; } } int query_original(int idx) { int result = 0; for (int i = idx; i >= 1; i -= (i & (-i))) { result += tree_original[i]; } return result; } void fastIO() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); } int main() { fastIO(); cin >> n; for (int i = 1; i <= n; ++i) { cin >> p[i]; pos[p[i]] = i; } dp[n + 1] = 0; for (int i = n; i >= 1; --i) { update_original(pos[i], +1); dp[i] = 1e9; int cost = 0; for (int j = i; j <= n; ++j) { cost += query_original(pos[j]) - 1; for (int k = 1; k <= n; ++k) { if (pos[k] > pos[j] && k >= i && k <= j) { --cost; } } dp[i] = min(dp[i], dp[j + 1] + cost); } } cout << dp[1] << endl; 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...