⚡️属⚡️于⚡️我⚡️的⚡️力⚡️量⚡️
2026-10-03 21:32:31
发布于:上海
8阅读
0回复
0点赞
归并排序
所以模版还是得背
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
int a[300005];
int b[300005];
int ans=0;
void merge(int l,int r){
if(l==r)return;
int mid=(l+r)/2;
merge(l,mid);
merge(mid+1,r);
int i=l,j=mid+1,k=l;
while(i<=mid && j<=r){
if(a[i]<=a[j]){ //因为学号是独特的,<=或<都是可以的
ans+=mid-i+1;
b[k++]=a[i];
j++;//这里注意是i在挑选j
}else{
b[k++]=a[j];
i++;//这里注意是j在挑选i,在i中找,直到不合适
}
}
while(i<=mid){
b[k++]=a[i];
i++;
}
while(j<=r){
b[k++]=a[j];
j++;
}
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
merge(1,n);
cout<<ans;
return 0;
}
这里空空如也




有帮助,赞一个