#include<iostream>
#define rep(i, n) for(i=0;i<n;i++)
#define repi(i,l,r) for(i=l;i<=r;i++)
using namespace std;
void mergesort(int l, int r);
void merge(int l, int m, int r);
int a[100005];
int b[100005];
int hit;
int main(){
hit = 0;
int i, k;
cin >> k;
rep(i, k) cin >> a[i];
mergesort(0, k - 1);
rep(i, k) cout << a[i];
cout << endl;
cout << hit << endl;
getchar(); getchar(); //crash
}
void mergesort(int l, int r){
if (l < r){
int m = (l + r) / 2;
mergesort(l, m);
mergesort(m + 1, r);
merge(l, m, r);
}
}
void merge(int l, int m, int r){
if (m < r){
int i=l, j=m+1;
int k=l;
while (i<=m&&j<=r){
if (a[i]< a[j]){
b[k++] = a[i++];
}
else
{
b[k++] = a[j++];
hit += m - i + 1;
}
}
if (i>m)
for (; j <= r;)
b[k++] = a[j++];
else if (j>r)
for (; i <= m;)
b[k++] = a[i++];
repi(k, l, r){
a[k] = b[k];
}
}
}
mergesort
最新推荐文章于 2022-07-11 17:20:49 发布