제출 #1163586

#제출 시각아이디문제언어결과실행 시간메모리
1163586dzuizzEkoeko (COCI21_ekoeko)C++20
0 / 110
1 ms1864 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); } int f(string s,string t){ memset(ft,0,sizeof ft); stack<int> st[26]; for(int i=(int)s.size()-1;i>=0;--i){ st[s[i]-'a'].emplace(i); } int ret=0; for(int i=0;i<(int)t.size();++i){ int x=st[t[i]-'a'].top(); st[t[i]-'a'].pop(); int nx=x+sum(x); if(nx>i){ ret+=nx-i; add(i,1),add(x,-1); } } return ret; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); string s; cin>>n>>s; // Subtask 3 string a=s.substr(0,n),b=s.substr(n,n); cout<<min(f(a,b),f(b,a))<<'\n'; return 0; /* Subtask 2 for(int i=0;i<26;++i)if(pos[i].size()) a[_ptr++]={v[i][0],i}; sort(a,a+n); for(int i=0;i<n;++i) word[i]=a[i].second; int ans=0,run=0; for(int i=0;i<n;++i){ int x=v[word[i]][0]; ans+=max(nx+run-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'; 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,run=0; for(int i=0;i<n;++i){ int x=v[word[i]][0]; int pos=x+run; 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; */ }
#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...