留下做题痕迹
2024-08-17 13:39:15
发布于:广东
13阅读
0回复
0点赞
X03蒟蒻一只,老师带我们写过
#include<bits/stdc++.h>
using namespace std;
int a[500005],n;
long long nxd=0;
void mg(int l,int r,int mid){
vector<int> tm;
int i=l,le=mid,j=mid+1,re=r;
while(i<=le&&j<=re){
if(a[i]<=a[j]){
tm.push_back(a[i++]);
}else{
tm.push_back(a[j++]);
nxd+=mid-i+1;
}
}
while(i<=le)tm.push_back(a[i++]);
while(j<=re)tm.push_back(a[j++]);
for(int i=0;i<tm.size();i++){
a[l+i]=tm[i];
}
}
void mgst(int l,int r){
if(l>=r)return;
int mid=(l+r)>>1;
mgst(l,mid);
mgst(mid+1,r);
mg(l,r,mid);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
mgst(1,n);
printf("%lld",nxd);
return 0;
}
这里空空如也
有帮助,赞一个