P1908求逆序对求助
查看原帖
P1908求逆序对求助
194761
Isenthalpic楼主2020/7/25 13:06

归并排序30分,为什么这样写是错的,lyd书上是这么写的。。。

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int n,a[N],b[N],ans;
void mergesort(int l,int r){
	if(l==r)return;
	int mid=(l+r)>>1;
	mergesort(l,mid);
	mergesort(mid+1,r);
	int i=l,j=mid+1;
	for(int k=l;k<=r;k++)
		if(j>r||i<=mid&&a[i]<a[j])
			b[k]=a[i++];
		else b[k]=a[j++],ans+=mid-i+1;
	for(int k=l;k<=r;k++)a[k]=b[k];
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	mergesort(1,n);
	printf("%d",ans);
	return 0;
}
2020/7/25 13:06
加载中...