爆零求救
  • 板块P1908 逆序对
  • 楼主xddno1
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/1/7 14:37
  • 上次更新2023/10/28 12:43:19
查看原帖
爆零求救
419502
xddno1楼主2022/1/7 14:37

用下面这行就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;
} 
2022/1/7 14:37
加载中...