Submission #1257015

#TimeUsernameProblemLanguageResultExecution timeMemory
1257015RandomUserEkoeko (COCI21_ekoeko)C++20
110 / 110
22 ms2576 KiB
#include <bits/stdc++.h> #define ar array //#define int long long using namespace std; using ll = long long; using pii = pair<int, int>; using pll = pair<ll, ll>; const int mod = 1e9 + 7; const ll inf = 1e18; const int N = 1e5 + 5; struct fenwick { int n; vector<int> tree; fenwick(int _n) : n(_n+10), tree(n+50) {} void update(int p, int v) { for(p++; p<n; p+=p&-p) tree[p] += v; } int query(int p) { int ans = 0; for(p++; p; p-=p&-p) ans += tree[p]; return ans; } }; signed main() { int n; cin >> n; string s; cin >> s; map<char, int> mp; string l="",r=""; for(char ch : s) mp[ch]++; ll ans = 0, skip = 0; for(int i=0; i<2*n; i++) { if(mp[s[i]]) { l += s[i]; ans += skip; mp[s[i]] -= 2; } else { r += s[i]; skip++; } } map<int, vector<int> > L, R; for(int i=0; i<n; i++) { L[l[i]].push_back(i); R[r[i]].push_back(i); } vector<int> perm(n); for(char ch='a'; ch<='z'; ch++) for(int i=0; i<R[ch].size(); i++) perm[R[ch][i]] = L[ch][i]; fenwick fwt(n); for(int i=0; i<n; i++) { ans += i - fwt.query(perm[i]); fwt.update(perm[i], 1); } cout << ans << '\n'; }
#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...