只能过前一半,50分,求助
  • 板块P1908 逆序对
  • 楼主hammp
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/6/25 21:36
  • 上次更新2023/10/27 22:34:46
查看原帖
只能过前一半,50分,求助
740124
hammp楼主2022/6/25 21:36
#include<stdio.h>
int merge(int *a,int *temp,int left,int c,int right){
	int i,j;
	long long n=0;
	int k=left;
	i=left,j=c+1;
	while(i<=c&&j<=right){
		if(a[i]>a[j]){
			temp[k++]=a[j++];
			n += c+1-i; 
		}
		else{
			temp[k++]=a[i++];
		}
	}
	while(i<=c) 
		temp[k++]=a[i++];
	while(j<=right)
		temp[k++]=a[j++];
	for(int i=left;i<=right;i++)
		a[i]=temp[i];
	return n;
}
int Nixudui(int *a,int *temp,int left,int right){
	long long n=0;
	int c;
	if(left==right)
		return 0;
	else{
		c = (left+right)/2;
		n += Nixudui(a,temp,left,c);
		n += Nixudui(a,temp,c+1,right);
		n += merge(a,temp,left,c,right);
		return n;	
	}
}
int main(){
	int n;
	long long num;
	scanf("%d",&n);
	int a[n],temp[n];
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
	num=Nixudui(a,temp,0,n-1);
	printf("%lld",num); 
} 
2022/6/25 21:36
加载中...