제출 #1330301

#제출 시각아이디문제언어결과실행 시간메모리
1330301secondaccountmaybeEkoeko (COCI21_ekoeko)C++20
110 / 110
34 ms10684 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a[200005];
ll b[200005];
ll n;
void g(ll*x,ll i,ll v)
{
	for(i++;i<=n;i+=i&(-i))
	{
		x[i]+=v;
	}
}
ll h(ll*x,ll i)
{
	ll s=0;
	for(i++;i>0;i-=i&(-i))
	{
		s+=x[i];
	}
	return s;
}
void f()
{
	ll m;
	cin>>m;
	string s;
	cin>>s;
	ll l=2*m;
	vector<vector<ll>>p(26);
	for(ll i=0;i<l;i++)
	{
		p[s[i]-'a'].push_back(i);
	}
	vector<pair<ll,ll>>k;
	for(ll c=0;c<26;c++)
	{
		ll t=p[c].size();
		if(t==0)
		{
			continue;
		}
		ll z=t/2;
		for(ll j=0;j<z;j++)
		{
			k.push_back({p[c][j],p[c][z+j]});
		}
	}
	sort(k.begin(),k.end());
	ll u=k.size();
	vector<ll>v;
	for(auto&x:k)
	{
		v.push_back(x.first);
		v.push_back(x.second);
	}
	sort(v.begin(),v.end());
	v.erase(unique(v.begin(),v.end()),v.end());
	n=(ll)v.size()+1;
	ll r=0;
	for(ll i=0;i<n+2;i++)
	{
		a[i]=0;
		b[i]=0;
	}
	for(ll i=u-1;i>=0;i--)
	{
		ll q=(ll)(lower_bound(v.begin(),v.end(),k[i].first)-v.begin());
		ll w=(ll)(lower_bound(v.begin(),v.end(),k[i].second)-v.begin());
		ll e=u-1-i;
		r+=e-h(a,w);
		if(w>0)
		{
			r+=h(b,w-1);
		}
		g(a,q,1);
		g(b,w,1);
	}
	cout<<r<<endl;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	ll t=1;
	while(t--)
	{
		f();
	}
	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...