
我的处理思路是找到类似于环的数字位置统计并输出,比如示例给出的 "3 4 5 2 1" 分别搜索出3 5 1和2 4,但是TLE。
#include <bits/stdc++.h>
using namespace std;
int a[200007];
int b[200007];
bool vis[200007];
int cbiao=-1;
int ans=0;
bool flag=0;
int n,x;
void findd(int zhi)
{
for(int j=1;j<=n;j++)
{
if(zhi==a[j] && vis[j]==0)
{
vis[j]=1;
if(b[j]==cbiao)
{
ans++;
return;
}
findd(b[j]);
}
}
}
#define ll long long
int main()
{
freopen("202409E.in","r",stdin);
freopen("202409E.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
b[i]=a[i];
}
sort(b+1,b+n+1);
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
if(a[i]!=b[i])
{
cbiao=a[i];
findd(b[i]);
}
else ans++;
}
}
cout<<ans;
return 0;
}