归并RE三个点求助!
  • 板块P1908 逆序对
  • 楼主Danny_SCQ
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/6/19 21:41
  • 上次更新2023/11/4 21:42:39
查看原帖
归并RE三个点求助!
485410
Danny_SCQ楼主2021/6/19 21:41
#include<cstdio>
using namespace std;
int a[40000+5];
int t[40000+5];
int ans=0;
void merge(int A[],int l,int r,int T[])
{
		int mid=(l+r)/2;
		int i=l;
		int j=mid+1;
		int t=l;
		while(i<=mid&&j<=r)
		{
			if(A[i]<A[j])
			{
				T[t++]=A[i++];
			}else{
				ans+=mid-i+1;
				T[t++]=A[j++];
			}
		}
		while(i<=mid)
		{
			T[t++]=A[i++];
		}
		while(j<=r)
		{
			T[t++]=A[j++];
		}
		for(int i=1;i<=r;i++)
		{
			A[i]=T[i];
		}		
}
void mergesort(int A[],int l,int r,int T[])
{
	if(l<r)
	{
		int mid=(l+r)/2;
		mergesort(A,l,mid,T);
		mergesort(A,mid+1,r,T);
		merge(A,l,r,T);
	}
}
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	mergesort(a,1,n,t);
    printf("%d ",ans);
	return 0;
}
2021/6/19 21:41
加载中...