Submission #1163575

#TimeUsernameProblemLanguageResultExecution timeMemory
1163575dzuizzEkoeko (COCI21_ekoeko)C++20
0 / 110
3 ms2488 KiB
#include<bits/stdc++.h> using namespace std; //#define DEBUG #define int long long const int maxn=2e5+5; int ft[maxn],n; void add(int idx,int v){ for(++idx;idx<=2*n;idx+=idx&-idx) ft[idx]+=v; } int sum(int idx){ int ret=0; for(++idx;idx>0;idx-=idx&-idx) ret+=ft[idx]; return ret; } int sum(int l,int r){ return sum(r)-sum(l-1); } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; string s; cin>>s; vector<int> v[26]; for(int i=0;i<(int)s.size();++i){ v[s[i]-'a'].emplace_back(i); } #ifdef DEBUG for(auto&x:v) {for(auto&e:x) cout<<e<<" ";} cout<<'\n'; #endif // Subtask 2 pair<int,int> a[n]; int _ptr=0; for(int i=0;i<26;++i){ if(v[i].size()){ a[_ptr++]={v[i][0],i}; } } sort(a,a+n); int word[n]; for(int i=0;i<n;++i) word[i]=a[i].second; int ans=0; for(int i=0;i<n;++i){ int x=v[word[i]][0]; int pos=x+sum(x); ans+=max(pos-i,0ll); add(i,1),add(x,-1); } for(int i=0;i<n;++i){ int x=v[word[i]][1]; int pos=x+sum(x); ans+=max(pos-n-i,0ll); add(i+n,1),add(x,-1); } cout<<ans<<'\n'; /* for(int i=0;i<26;++i) if(v[i].size()) { int x=min(v[i][0],pos[i]),y=max(v[i][0],pos[i]); ans+=y-x-sum(x,y); cout<<x<<" "<<y<<" -> "<<sum(x,y)<<'\n'; add(v[i][0],1); x=min(v[i][1],pos[i]+n),y=max(v[i][1],pos[i]+n); ans+=y-x-sum(x,y); cout<<x<<" "<<y<<" -> "<<sum(x,y)<<'\n'; add(v[i][1],1); } cout<<ans<<'\n';*/ return 0; // Subtask 1 int cnt=0; for(int i=0;i<26;++i) if(v[i].size()) ++cnt; if(cnt==2){ cout<<(n/2)*(n/2)<<'\n'; return 0; } 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...