gaojizhe05 @ 2023-11-16 10:02:10
用了归并排序,但只有30分,一堆WA,请求大佬帮助!
#include <bits/stdc++.h>
using namespace std;
const int maxn=5e5;
int n,a[maxn],b[maxn],ans=0;
void Init(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
}
void Do(int x,int y,int z,int w){
if(z>n) return;
int cnt=0;
int p=x,q=z;
for(int i=x;i<=w;i++){
if(a[p]<a[q]){
b[i]=a[p];
p++;
ans+=cnt;
if(p>y){
for(int j=i+1,k=q;j<=w;j++,k++)
b[j]=a[k];
break;
}
}
else if(a[p]>a[q]){
b[i]=a[q];
cnt++;
q++;
if(q>w){
for(int j=i+1,k=p;j<=w;j++,k++){
b[j]=a[k];
ans+=cnt;
}
break;
}
}
}
for(int i=x;i<=w;i++)
a[i]=b[i];
}
void Work(){
for(int i=1;i<=n;i*=2)
for(int j=1;j<=n;j+=i*2)
Do(j,j+i-1,i+j,min(j+i*2-1,n));
cout<<ans;
}
int main(){
Init();
Work();
return 0;
}