归并做的过不了,求救
  • 板块P1908 逆序对
  • 楼主比尔008
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/4/30 14:28
  • 上次更新2023/11/4 23:56:29
查看原帖
归并做的过不了,求救
408856
比尔008楼主2021/4/30 14:28

代码

#include<bits/stdc++.h>
using namespace std;
long long a[500005],b[500005],sss=0;
void gb(int l,int r)
{
	if(l==r) 
	  return;
	long long m=(l+r)/2,i=l,j=m+1,k=l;
	gb(l,m);
	gb(m+1,r);
	while(i<=m&&j<=r)
	{
		if(a[i]<a[j]) 
		{
		  b[k++]=a[i++];
	    }
		else 
		{
		  b[k++]=a[j++];
		  sss=sss+m-l+1;
	    }
	}
	for(;i<=m;i++) 
	  b[k++]=a[i];
	for(;j<=r;j++) 
	  b[k++]=a[j];
	for(i=l;i<=r;i++) 
	  a[i]=b[i];
}
int main()
{ 
	long long n,m,p;
	cin>>n;
    for(int i=1;i<=n;i++)
    	cin>>a[i];
    gb(1,n);
	cout<<sss;
	return 0;
}
2021/4/30 14:28
加载中...