样例不过,求助
查看原帖
样例不过,求助
546456
AntonyD楼主2023/11/25 14:28

样例返回10 0.

归并部分应该没有问题.

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[500010],tmp[500010],ans;
int n;
int mergesort(int l,int r) {
	if(l==r) return 0;
	int mid=l+(r-l)/2;
	mergesort(l,mid);
	mergesort(mid+1,r);
	int i=l,j=mid+1,k=l;
	while(i<=mid&&j<=r) {
		if(a[i]<=a[j])tmp[k++]=a[i++];
		else {
			tmp[k++]=a[j++];
			ans+=mid-i+1;
		}
	}
	while(i<=mid)tmp[k++]=a[i++];
	while(j<=r)tmp[k++]=a[j++];
	for(int i=l; i<=r; i++)a[i]=tmp[i];
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	while (scanf("%d",&n) && n !=0) {
		ans = 0;
		for (int i = 0; i < n; ++i) {
			cin>>a[i];
		}
		mergesort(0, n);
		cout<<ans<<' ';
	}
	return 0;
}
2023/11/25 14:28
加载中...