Hayya @ 2024-09-21 10:40:33
#include<bits/stdc++.h>
using namespace std;
int nxd(int a[],int l,int r)
{
long long count;
int mid=(l+r)/2,index=r;
if(l>=r) return 0;
count=count+nxd(a,l,mid)+nxd(a,mid+1,r);
sort(a+l,a+mid+1,greater<int>());
sort(a+mid+1,a+r+1,greater<int>());
for(int i=mid;i>=l;i--)
{
for(int j=index;j>=mid+1;j--)
{
while(a[i]>a[j])
{
index--;
count+=i-l+1;
}
}
}
return count;
}
int main()
{
long long s;int b[500000];
cin>>s;
for(int k=0;k<s;k++)
cin>>b[k];
cout<<nxd(b,0,s-1);
return 0;
}
by kbzcz @ 2024-09-21 10:59:57
老哥,你运行一下你的代码行不。
by zhouzihang1 @ 2024-09-21 11:09:32
sort?
by Hayya @ 2024-09-21 11:18:29
@kbzcz 就是没输出才问啊
by Hayya @ 2024-09-21 11:19:51
@zhouzihang1 应该可以这样排序吧? 网上看到的,我不太懂
by zzbzwjx @ 2024-09-22 18:07:44
@Hayya 请尝试检查是否出现了无限递归
by zzbzwjx @ 2024-09-22 18:09:39
呸是死循环了
by zzbzwjx @ 2024-09-22 18:11:01
for(int i=mid;i>=l;i--)
{
for(int j=index;j>=mid+1;j--)
{
while(a[i]>a[j])
{
index--;
count+=i-l+1;
}
}
}
请先自行尝试解决此处的死循环问题
by Hayya @ 2024-09-22 23:26:07
@zzbzwjx 死循环改了,但是结果还是大得离谱,请问我这题想法有问题吗?改完代码如下
for(int i=mid;i>=l;i--)
{
for(int j=index;j>=mid+1;j--)
{
if(a[i]>a[j])
{
index--;
count+=i-l+1;
}
else break;
}
}
by zzbzwjx @ 2024-09-23 21:09:36
@Hayya 不是你这怎么越改越离谱啊,死循环不是你这么改的啊,你应该检查的是你设置的条件、循环内部 和整体逻辑是否有问题,而不是单纯为了解决这一处死循环而改动