只得10分,在线求助大佬!
查看原帖
只得10分,在线求助大佬!
1073177
Peruere楼主2024/1/9 20:52
#include<bits/stdc++.h>
using namespace std;
struct ddd{
	int i;
	int shu;
}a[10010];
int n,tmp[10010];
int ans=0;
void merge(int l,int mid,int r){
	int i=l,j=mid+1,p=l;
	while(i<=mid&&j<=r){
		//i and j
		if(a[i].shu<=a[j].shu){
			tmp[p++]=a[i++].shu;
		}
		else{
			tmp[p++]=a[j++].shu;
			for(int g=1;g<=i*(n-j+1);g++){
				ans+=a[g].i;
			}
		}
	}
		//i
		while(i<=mid){
			tmp[p++]=a[i++].shu;
		}
		//j
		while(j<=r){
			tmp[p++]=a[j++].shu;
		}
		for(int i=l;i<=r;i++){
			a[i].shu=tmp[i];
		}
}
void merge_sort(int l,int r){
	if(l==r)return ;
	int mid=(l+r)/2;
	//l~mid排序! 
	merge_sort(l,mid);
	//mid+1~r排序!! 
	merge_sort(mid+1,r);
	//调用归并函数!!! 
	merge(l,mid,r);
	
}
int main(){
	//读入-> 
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].shu;
		a[i].i=i;
	}
	merge_sort(1,n);
	cout<<ans;
	return 0;
}
2024/1/9 20:52
加载中...