Submission #1126952

#TimeUsernameProblemLanguageResultExecution timeMemory
1126952_rain_Ekoeko (COCI21_ekoeko)C++20
0 / 110
2 ms956 KiB
#include<bits/stdc++.h> using namespace std; typedef long long LL; #define inp(data_name) freopen(data_name,"r",stdin); #define out(data_name) freopen(data_name,"w",stdout); #define FOR(i,a,b) for(int i=(a);i<=(b);++i) #define FORD(i,a,b) for(int i=(b);i>=(a);--i) #define N 2'00'000 vector<int>pos[27],serve2; int total[27]={},cnt[27]={},times=0; string s; int n; int BIT[N+2]={}; void upd(int id,int val){ for(;id<=n;id+=id&-id) BIT[id]+=val; } int Get(int id){ int sum=0; for(;id;id-=id&-id) sum+=BIT[id]; return sum; } int32_t main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>s; s='#'+s; FOR(i,1,2*n) total[s[i]-'a']++; LL ans=0; FOR(i,1,2*n){ ++cnt[s[i]-'a']; if (cnt[s[i]-'a']>total[s[i]-'a']/2){ if (i<n+1) ans+=(n+1-i); serve2.push_back({pos[s[i]-'a'][cnt[s[i]-'a']-total[s[i]-'a']/2-1]}); } else { pos[s[i]-'a'].push_back(++times); } } int cur=0; for(auto&x:serve2) { ans+=cur-Get(x); upd(x,1); ++cur; } printf("%lld",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...