交换相邻数字
**答案就是 逆序数 **
交换任意数字
**答案就是 n- 环数 **
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
const int N=1000000+20;
using namespace std;
int a[N],vis[N];
map<int,int>m;
int main()
{
int n,x;
while(scanf("%d",&n)!=EOF)
{
m.clear();
mem(a,0);
mem(vis,0);
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
m[a[i]]=i;
}
sort(a+1,a+n+1);
int ans=0;
for(int i=1; i<=n; i++)
{
if(!vis[i])ans++;;
int j=i;
while(!vis[j])
{
vis[j]=1;
j=m[a[j]];
}
}
printf("%d\n",n-ans);
}
return 0;
}