题意:
给定长度为n的数组a,问是否能通过最多一次交换两个不同位置的数,使得数组非降序。
数据范围:n<=1e5
解法:
令b[]=a[],然后对b排序
判断有多少个b(i)!=a(i),如果是0个或者2个则满足,否则不满足
ps:
大翻车。根本不用关心每个数的下标id变化。。。
code:
#include<bits/stdc++.h>
using namespace std;
const int maxm=1e5+5;
int a[maxm];
int b[maxm];
int n;
signed main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i],b[i]=a[i];
sort(b+1,b+1+n);
int ans=0;
for(int i=1;i<=n;i++){
if(a[i]!=b[i])ans++;
}
if(ans!=0&&ans!=2)puts("NO");
else puts("YES");
return 0;
}