50分求助,归并排序,TLE后面十个点
  • 板块P1908 逆序对
  • 楼主csbe
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/7/15 16:59
  • 上次更新2023/11/4 14:43:34
查看原帖
50分求助,归并排序,TLE后面十个点
475198
csbe楼主2021/7/15 16:59
#include<cstdio>
using namespace std;
long long ans=0;
int a[500010],b[500010],n;
void mergesort(int l,int r){
	if(l==r)return;
	int mid=(l+r)>>1;
	mergesort(l,mid);
	mergesort(mid+1,r);
	int p1=l,p2=mid+1,p3=l;
	while(p1<=mid&&p2<=r){
		if(a[p1]<=a[p2])b[p3]=a[p1],p1++,p3++;
		else b[p3]=a[p2],p3++,p2++,ans+=mid-p1+1;	
	}
	while(p1<=mid)b[p3]=a[p1],p3++,p1++;
	while(p2<=r)b[p3]=a[p2],p3++,p2++;
	for(int i=1;i<=r;i++)a[i]=b[i];
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	mergesort(1,n);
	printf("%d",ans);
	return 0;
}
2021/7/15 16:59
加载中...