为什么50分?
  • 板块P1908 逆序对
  • 楼主lucy2012
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/6/5 21:18
  • 上次更新2024/6/6 11:39:17
查看原帖
为什么50分?
1252442
lucy2012楼主2024/6/5 21:18
#include<bits/stdc++.h>
using namespace std;
int a[1000010],b[1000010],n,ans;
void merge(int l,int r){
	int i,j,k,mid;
	i=l;
	mid=(l+r)/2;
	j=mid+1;
	k=l;
	while(i<=mid&&j<=r){
		if(b[i]<=b[j])
			a[k++]=b[i++];
		else{
			a[k++]=b[j++];
			ans+=mid-i+1;
		}
	}
	while(i<=mid)
	    a[k++]=b[i++];
	while(j<=r)
	    a[k++]=b[j++];
	for(i=l;i<=r;i++)
	    b[i]=a[i];
}
void mergesort(int l,int r){
	if(l<r){
		int mid=(l+r)/2;
		mergesort(l,mid);
		mergesort(mid+1,r);
		merge(l,r);
	}
} 
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)
	    cin>>b[i];
	mergesort(1,n);
    cout<<ans;
	return 0;
}	 
2024/6/5 21:18
加载中...