归并排序,开long long还是50
查看原帖
归并排序,开long long还是50
754146
lucky_loser楼主2022/12/26 10:59

代码如下

#include<bits/stdc++.h>
using namespace std;
int n,a[500000],b[500000];
long long ans;
void msort(int l,int r)
{
    if(l==r)  
		return;
    int mid=(l+r)/2,i=l,j=mid+1,k=l;
    msort(l,mid),msort(mid+1,r);
    while(i<=mid&&j<=r)
    	if(a[i]<=a[j])
    		b[k++]=a[i++];
    	else
    		b[k++]=a[j++],ans+=mid-i+1;
    while(i<=mid)
    	b[k++]=a[i++];
    while(j<=r)
    	b[k++]=a[j++];
    for(int i=l;l<=r;l++)
    	a[l]=b[l];
} 
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	msort(1,n);
	printf("%lld",ans);
	return 0;
} 
2022/12/26 10:59
加载中...