10分?
查看原帖
10分?
1187975
ccdssfj楼主2024/9/1 20:16

代码如下:

#include<bits/stdc++.h>
using namespace std;

const int N=3e6+10;

int arr[N],tmp[N];

long long ans;

void msort(int l,int r){
	if(l>=r)return ;
	int mid=(l+r)/2;
	msort(l,mid);
	msort(mid+1,r);
	
	int i=l,j=mid+1,k=l;
	while(i<=mid && j<=r){
		if(arr[i]<arr[j]) ans+=r-j+1,tmp[k++]=arr[i++];
		else tmp[k++]=arr[j++];
	}
	if(i<=mid) tmp[k++]=arr[i++];
	if(j<=r) tmp[k++]=arr[j++];
	for(int ii=l;ii<=r;ii++){
		arr[ii]=tmp[ii];
	}
	return ;
}

int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>arr[i];
	}
	msort(1,n);
	cout<<ans;
	
	return 0;
}
2024/9/1 20:16
加载中...