#include <bits/stdc++.h>
using namespace std;
/* 本次的代码中,数组要从1开始计数,不从0开始 */
long long int a[500050],tool[500050],ans=0;
int main()
{
void mer_sort(long long int a[],long long int lef,long long int mid,long long int rig);
void merge_tool(long long int a[],long long int lef,long long int rig);
long long int n; scanf("%lld", &n);
for(long long int i=1;i<=n;i++) scanf("%lld", &a[i]);
merge_tool(a,1,n);
printf("%lld",ans);
system("pause");
}
void mer_sort(long long int a[],long long int lef,long long int mid,long long int rig)
{
long long int i=lef,j=mid+1,k=lef;//lef , mid & rig need attention!!!
while(i<=mid&&j<=rig)
{
if(a[i]<=a[j]) tool[k++]=a[i++];
else
{
tool[k++]=a[j++];
ans+=mid-i+1;
}
}
if(i>mid)
for(long long int t=j;t<=rig;t++) tool[k++]=a[t];
if(j>rig)
for(long long int t=i;t<=mid;t++) tool[k++]=a[t];
for(long long int t=lef;t<=rig;t++) a[t]=tool[t];
}
void merge_tool(long long int a[],long long int lef,long long int rig)
{
if(lef>=rig) return;
else
{
merge_tool(a,lef,(lef+rig)/2);
merge_tool(a,(rig+lef)/2+1,rig);
mer_sort(a,lef,(rig+lef)/2,rig);
}
}
就是在mer_sort()函数中的27行
ans的计数代码那里
为何要使用ans+=mid-i+1;
鄙人用ans+=j-i;
就全WA了 /雾