Submission #814201

#TimeUsernameProblemLanguageResultExecution timeMemory
814201MohamedAhmed04Group Photo (JOI21_ho_t3)C++14
100 / 100
3436 ms764 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] ; 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 = n ; i >= 1 ; --i) { s.clear() ; dp[i] = 1e9 ; int inv = 0 ; for(int j = i ; j <= n ; ++j) { inv += cnt[j] ; inv += s.order_of_key(pos[j]) ; inv -= s.size() - s.order_of_key(pos[j]) ; dp[i] = min(dp[i] , dp[j+1] + inv) ; s.insert(pos[j]) ; } } 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...