#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
typedef long long ll;
void merge_sort(int a[],int l,int r,ll *ans)
{
if(l==r) return ;
int b[N];
int pivot=(l+r)>>1;
int pl=l,pr=pivot+1,pb=l;
merge_sort(a,l,pivot,ans);
merge_sort(a,pivot+1,r,ans);
while(pl<=pivot||pr<=r)
{
if(pl>pivot) b[pb++]=a[pr++];
else if(pr>r) b[pb++]=a[pl++];
else
{
if(a[pl]<=a[pr])b[pb++]=a[pl++];
else {
b[pb++]=a[pr++];
*ans+=pivot-pl+1;}
}
}
for(int i=l;i<=r;i++)
{
a[i]=b[i];
}
}
int main()
{
int n;cin>>n;
ll ans=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
merge_sort(a,1,n,&ans);
for(int i=1;i<=n;i++)
{
cout<<a[i]<<" \n"[i==n];
}
cout<<ans<<'\n';
return 0;
}
A14 归并排序 逆序对_哔哩哔哩_bilibili