归并排序,样例过了却爆零,求助qwq
查看原帖
归并排序,样例过了却爆零,求助qwq
1615729
Nanfeng0730楼主2025/7/22 15:45
#include<iostream> 
using namespace std;
long long a[5000001],b[5000001];
long long n,ans;
void msort(long long l,long long r)
{
	if(l==r) return; //一个数字无须排序(递归边界)
	long long m=(l+r)/2;
	msort(l,m); //分解左序列
	msort(m+1,r); //分解右序列
	int i=l,j=m+1,k=l; //接下来合并
	while(i<=m&&j<=r)
	{
		if(a[i]<=a[j]) b[k++]=a[i++];
		else b[k++]=a[j++],ans+=m-i+1;
	}
	while(i<=m) b[k++]=a[i++]; //复制左边子序列剩余
	while(j<=r) b[k++]=a[j++]; //复制右边子序列剩余
	for(int i=l;i<=r;i++) a[i]=b[i];
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i]; 
	cout<<endl;
	msort(1,n);
	cout<<ans<<endl;
	return 0; 
}
2025/7/22 15:45
加载中...