调代码,0pts
查看原帖
调代码,0pts
1323541
han1219楼主2025/2/7 20:36
#include<iostream>
#define maxn int(3e5)+1 
using namespace std;
long long n,a[maxn],b[maxn],ans;
void cdq(int l,int r){
	int mid=(l+r)/2;
	if(l>=r)return;
	cdq(l,mid);
	cdq(mid+1,r);
	int sl=l,sr=mid+1,k=0;
	while(sl<=mid&&sr<=r){
		if(a[sl]>a[sr]){
			ans+=(mid-sl+1);
			b[++k]=a[sr++];
		}else{
			b[++k]=a[sl++];
		}
	}
	while(sl<=mid)a[++k]=b[sl++];
	while(sr<=r)a[++k]=b[sr++];
	for(int i=l;i<=r;i++){
		a[i]=b[i-l+1];
	}
}
int main(){
	cin>>n;
	for(int i=n;i>0;i--){
		cin>>a[i];
	} 
	cdq(1,n);
	for(int i=n;i>0;i--){
		cout<<a[i]<<" ";
	}
	cout<<endl;
	cout<<ans;
	return 0;
} 
2025/2/7 20:36
加载中...