用下面这行就ac while(l<=r) arr[l] = mergearr[l],l++; 但是用这个会爆零 while(l<=r) arr[l] = mergearr[l++]; 求大佬解释一下ToT
#include<cstdio>
#include<algorithm>
using namespace std;
int n;
int arr[500005];
int mergearr[500005];
long long ans;
void merge(int l,int r)
{
if(l == r) return ;
int mid = (l+r)/2;
merge(l,mid);
merge(mid+1,r);
int ll=l,rr=mid+1;
int mergecur=l;
while(rr<=r&&ll<=mid)
if(arr[ll]>arr[rr]) (mergearr[mergecur++] = arr[rr++],ans+=mid-ll+1);
else mergearr[mergecur++] = arr[ll++];
while(ll<=mid)mergearr[mergecur++] = arr[ll++];
while(rr<=r)mergearr[mergecur++] = arr[rr++];
while(l<=r) arr[l] = mergearr[l++];
// while(l<=r) arr[l] = mergearr[l],l++;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",arr+i);
merge(1,n);
printf("%lld",ans);
return 0;
}