30分求助
  • 板块P1908 逆序对
  • 楼主hurui99
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/9/7 08:55
  • 上次更新2024/9/7 11:42:48
查看原帖
30分求助
1205608
hurui99楼主2024/9/7 08:55
#include<bits/stdc++.h>
using namespace std;
const int N=5*1e5+5;
long long a[N],tmp[N],n,ans=0;
void mergesort (long long l,long long r){
	if(l>=r) return;
	long long mid=(l+r)>>1;
	mergesort(l,mid);
	mergesort(mid+1,r);
	int k=l,i=l,j=mid+1;
	while(i<=mid&&j<=r){
		if(a[i]<a[j]) tmp[k++]=a[i++];
		else tmp[k++]=a[j++],ans+=mid-i+1;
	}
	while(i<=mid) tmp[k++]=a[i++];
	while(j<=r) tmp[k++]=a[j++];
	for(int h=l;h<=r;h++){
		a[h]=tmp[h];
	}
	return;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	mergesort(1,n);
	cout<<ans;
} 
2024/9/7 08:55
加载中...