归并排序基础只改动了一点。。注释处
#include<stdio.h>
#include<stdlib.h>
int a[10000],ans;
void gbpx(int x,int y){
int u,v,m,i;
int t[10000];
if(x==y)return;
m=(x+y)/2;
if(x<=m)gbpx(x,m);
if(m+1<=y)gbpx(m+1,y);
u=x;v=m+1;
int k=0;
while(u<=m && v<=y){
if(a[u]>a[v]){
ans+=m-u+1; //在归并排序的基础上只改了这里
t[++k]=a[v];
v++;
}else{
t[++k]=a[u];
u++;
}
}
for(i=u;i<=m;i++)t[++k]=a[i];
for(i=v;i<=y;i++)t[++k]=a[i];
for(i=1;i<=k;i++)a[x+i-1]=t[i];
}
int main(){
int i,j,k,m,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
gbpx(1,n);
printf("%d\n",ans);
return 0;
}