0分求助
查看原帖
0分求助
398152
MinimumSpanningTree最小生成树楼主2023/1/29 11:28

样例过不了

#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
int n,a[500100],mid,t[500100];
ll ans;
void merge_sort(int l,int r)
{
	if(l==r) return;
	mid=(l+r)/2;
	merge_sort(l,mid),merge_sort(mid+1,r);
	for(int i=l,j=l,k=mid+1;i<=r;i++)
	{
		if(j==mid+1) t[i]=a[k++];
		else if(k==r+1) 
		{
			ans+=k-mid-1;
			t[i]=a[j++];
		}
		else 
		{
			if(a[j]<=a[k]) ans+=k-mid-1,t[i]=a[j++];
			else t[i]=a[k++];
		}
	}
	for(int i=l;i<=r;i++) 
	{
		a[i]=t[i];
	}
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	merge_sort(1,n);
	printf("%lld",ans);
	return 0;
}
2023/1/29 11:28
加载中...