Submission #742718

#TimeUsernameProblemLanguageResultExecution timeMemory
742718MohamedAhmed04Ekoeko (COCI21_ekoeko)C++14
110 / 110
72 ms6680 KiB
#include <bits/stdc++.h> using namespace std ; #include <ext/pb_ds/assoc_container.hpp> // Common file #include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update 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 = 2e5 + 10 ; int arr[MAX] , val[MAX] ; int n ; string s ; int freq[30] , freq2[30] ; vector<int>occ[30] ; long long solve(string s1 , string s2) { for(int i = n-1 ; i >= 0 ; --i) occ[s2[i]-'a'].push_back(i) ; for(int i = 0 ; i < n ; ++i) val[occ[s1[i]-'a'].back()] = i , occ[s1[i]-'a'].pop_back() ; ordered_set<int>s ; long long cnt = 0 ; for(int i = 0 ; i < n ; ++i) { cnt += s.size() - s.order_of_key(val[i]) ; s.insert(val[i]) ; } return cnt ; } int main() { ios_base::sync_with_stdio(0) ; cin.tie(0) ; cin>>n ; cin>>s ; for(auto &c : s) freq[c-'a']++ ; string s1 = "" , s2 = "" ; long long ans = 0 , cnt = 0 ; for(auto &c : s) { freq2[c-'a']++ ; if(freq2[c-'a']*2 <= freq[c-'a']) s1.push_back(c) , ans += cnt ; else s2.push_back(c) , cnt++ ; } ans += solve(s1 , s2) ; return cout<<ans<<"\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...