输入
3
3 2 1
输出
1
解析:
由于无重复数字,并且范围为1-n,所以可以循环节,cnt+(循环节-1)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
int n,res,a[N],vis[N];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++){
if(vis[i]||a[i]==i) continue;
int cnt=0,k=i;
while(a[k]!=k){
if(vis[k]) break;
vis[k]=1;
cnt++;
k=a[k];
}
res+=cnt-1;
}
cout<<res;
return 0;
}