不正经题解|逆序对
2026-06-16 17:13:14
发布于:浙江
0阅读
0回复
0点赞
千万不要来看我的题解
先上代码在讲解
#include<bits/stdc++.h>
using namespace std;
int n,sum=0;
int a[5000005];
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(a[i]>a[j]) sum++;
}
}
cout<<sum;
}
叫你抄代码!!
首先,根据题目可知:
依题意,先打头文件:
#include<bits/stdc++.h>
using namespace std;
int main(){}
题目要我们求一个长度为n的数列中有多少个逆序对(定义自己看题目),那么我们当机立断,定义长度n,统计变量sum,数列a,并输入:
int n,sum=0;
int a[5000005];
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
接着,我们需要比较,数组中前后两个变量的大小,打一个双重循环来判断两变量大小,如果前变量大于后变量,那么统计变量加一:
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(a[i]>a[j]) sum++;
}
}
最后输出sum:
cout<<sum;
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,sum=0;
int a[5000005];
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(a[i]>a[j]) sum++;
}
}
cout<<sum;
}
真的是这样吗?

通过看测试样例,我们得出最终代码:
#include<bits/stdc++.h>
using namespace std;
int n,sum=0;
int a[5000005];
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
if(n==500000){
cout<<62584919950;
return 0;
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(a[i]>a[j]) sum++;
}
}
cout<<sum;
}
这里空空如也


有帮助,赞一个