Submission #1265954

#TimeUsernameProblemLanguageResultExecution timeMemory
1265954namhhEkoeko (COCI21_ekoeko)C++20
110 / 110
10 ms8328 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define fi first #define se second const int N = 2e5+5; int n,cnt[N],cnt1[N],cnt2[N],cnt3[N],bits[N]; string s,a,b,c,d,p,q; vector<int>cc1,cc2,adj[N]; void update(int u){ while(u > 0){ bits[u]++; u -= u & (-u); } } int get(int u){ int sum = 0; while(u <= n){ sum += bits[u]; u += u & (-u); } return sum; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> s; s = "#"+s; for(int i = 1; i < s.size(); i++) cnt[s[i]-'a']++; for(int i = 1; i <= n; i++){ cnt1[s[i]-'a']++; if(cnt1[s[i]-'a'] > cnt[s[i]-'a']/2){ b += s[i]; cc1.push_back(i); } else a += s[i]; } for(int i = s.size()-1; i > n; i--){ cnt2[s[i]-'a']++; if(cnt2[s[i]-'a'] > cnt[s[i]-'a']/2){ d += s[i]; cc2.push_back(i); } else c += s[i]; } int x = b.size(); int ans = x*x; for(int i = 0; i < cc1.size(); i++) ans += n-(cc1.size()-i-1)-cc1[i]; for(int i = 0; i < cc2.size(); i++) ans += cc2[i]-n-1-i; reverse(c.begin(),c.end()); reverse(d.begin(),d.end()); p = "#"+a+d; q = "#"+b+c; for(int i = 1; i <= n; i++) adj[q[i]-'a'].push_back(i); for(int i = 1; i <= n; i++){ int x = p[i]-'a'; int pos = adj[x][cnt3[x]]; pos += get(pos); ans += pos-i; update(adj[x][cnt3[x]]); cnt3[x]++; } cout << ans; } //-----+--+----+-==-=*==--=+----------==----------------+=-----==-=+-==---------------- //---===+=----+=----=*=+=*+----------==-----------+=-----==-----==--+-+---------------- //---+=**=-=+---------***+----=------=-------------=-------+-----==-+--=--------------- //----*+-+++**++------=#+----===-----=-------------=-------==-----+-=+=-+-------------- //----++#***+*+++-----=+-----=-=----+---------------+-------+=-----*=-==-+------------- //---+=+**++**++++==++*=-----===----+---------------+----=---=-----=*+*=-==------------ //---++**==+--++++++***-----+-+-----+---------------==---==--==-----+**---+------------ //----++*#=-+++***+***------+-+-----+----------------=----+---*+=---=*#=-=-+----------- //-----=**+++*+++**%++-----=--+-----+----------------=----*=--==+==++***-=+==---------- //-------**#**++*%%@==-----=--+-----+-------------=+++++=-+=---+=+=-=+**--+++---------- //---------====+@@%@-=-----+--+--=+++++--------------=----+==--===---+*---+==+--------- //-----------=@*%%%%-=-----+=-==-----=---------------=----+--=-==+-=-=*----++==-------- //----------%#=%=#%%==-----=+--=-----=---------------+----+--===*=*==**=---+-++-------- //--------+@++@=*@%*-=-----=+=-=-----==-------------++-*%%%***=++-+=-+-+---=-===------- //-------#%-=%=+@%@+-=-----=+=--+++*==*=------------**@*##%*--=-+-----=+---==-+==------ //------=%+-=%=%*@@--=-----=*#*=+*###@%*---------=+*++%***##=-+-+------+---==-=+=------ //-------%*-=%@+@@+-*=-----+-=--@##*##=+==----------=-#*#***-==-+------+---==--++------ //-------+@=+@@*@*-=-=-----=-==-*#%*##=----------------++=+=----+------+---==--==+----- //--------%@@%%@*=--+=-----=---+=+#==*-------------------==-----+------+---==---=+----- //----------%+=#-=--==-----+-------===--------------------------*------+---==---+==---- //---------##-%+-=---=-----++----------------------------------=*------=---==---=+=---- //--------=#-*@=-=---=-----**=----------------=----------------+*------=---==----++---- //-------=@==%*-==---=-----++*---------------------------------*+------+---==----++=--- //------=%*-=@--==---=-----+++*-------------------------------**=------+---==----==+--- //------*#--##--==---=-----+++*+--------------------+--------+**=------+---=-----==+--- //-----=@=--@*---=---=-----+++#+*=--------=+=----=+=-------=#+**-------+---+-----==+--- //----=%+--=@+---=---=-----=+**++**=---------------------=*+****------==---+-----===--- //----*#---*@=---=--==-----=*+#++*+++*=---------------=*#*++#+*+==----+==-+=-----====-- //---=@=---%%----=--=+-----=*+#++*++++***+----------*****+++#**++-----+==-+-------===-- //---%#----%%---==--=+------*+*++*++**+***+**++=+****+==++*+**#-+-----+==-+-------+==-- //--=@=---=%#---==--+*------*++*+*++#+*****++++****+--==*=*****==----===-==-------+==-- //--##----=@*---+=--+*------=++*+*++*++++++*******=-------+***==-----===-==-------+==-- //-=@+----+@=---+=--+#=-----=*+*+*++#++*+++**#*++-+-------+***-+-----+===+--------*==-- //-*@=----*@=---=---+*+------++*+*+*-=++*+***=-+--+--------#**-=-----*====--------*==-- //=%%-----#@---==---=**------++****---------*=----+--------=#=+-----=*==*---------*==-- //=@*-----%@---==---=*#------++*+------=+%@##@+==%%+*+==----+==-----+*+-++++=+++*++==--
#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...