Submission #814206

#TimeUsernameProblemLanguageResultExecution timeMemory
814206MohamedAhmed04Group Photo (JOI21_ho_t3)C++14
100 / 100
207 ms67672 KiB
#include <bits/stdc++.h> using namespace std ; #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds ; template<class T> using ordered_set = tree<T , null_type , less<T> , rb_tree_tag , tree_order_statistics_node_update> ; const int MAX = 5000 + 10 ; int arr[MAX] ; int n ; int pos[MAX] , cnt[MAX] , cnt2[MAX][MAX] ; int dp[MAX] ; int main() { ios_base::sync_with_stdio(0) ; cin.tie(0) ; cin>>n ; for(int i = 1 ; i <= n ; ++i) cin>>arr[i] ; ordered_set<int>s ; for(int i = 1 ; i <= n ; ++i) { pos[arr[i]] = i ; cnt[i] = s.size() - s.order_of_key(arr[i]) ; s.insert(arr[i]) ; } for(int i = 1 ; i <= n ; ++i) { for(int j = i-1 ; j >= 1 ; --j) cnt2[i][j] = cnt2[i][j+1] + (pos[j] < pos[i]) ; } for(int i = n ; i >= 1 ; --i) { dp[i] = 1e9 ; int inv = 0 ; for(int j = i ; j <= n ; ++j) { inv += cnt[j] ; inv += cnt2[j][i] ; inv -= (j-i) - cnt2[j][i] ; dp[i] = min(dp[i] , dp[j+1] + inv) ; } } return cout<<dp[1]<<"\n" , 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...