@[__xsy2013__](/user/575714) ~~我的天呐,你这是什么神奇解法~~你直接vis数组判断掉排列再判断a[a[i]]是否等于i不就行了嘛
by CangerYumo @ 2024-04-19 21:05:22
其实不用那么复杂,直接按题目描述里的式子写if就行了
```
#include <iostream>
using namespace std;
int main() {
int n, a[100001], position[100001];
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
position[a[i]] = i;
}
for (int i = 1; i <= n; i++)
if (a[i] != position[i]) {
printf("NO");
return 0;
}
printf("YES");
return 0;
}
```
by xcjsb @ 2024-04-19 21:06:06
@[CangerYumo](/user/847286) @[xcjsb](/user/920435) 谢谢,我这种人就这样
by __xsy2013__ @ 2024-04-19 21:06:51
其实可以前缀和每个字符
by run_away @ 2024-04-19 21:15:25
```cpp
#include <bits/stdc++.h>
using namespace std;
int n,a[100050],p[100050];
int main(){
scanf("%d",&n);
for (int i = 1; i <= n; i++) scanf("%d",&a[i]);
for (int i = 1; i <= n; i++) p[a[i]] = i;
for (int i = 1; i <= n; i++) {
if (a[i] != p[i]) {
printf("NO");
return 0;
}
}
printf("YES");
return 0;
}
```
by liuruiqing @ 2024-04-19 21:15:55
~~(本蒟蒻的解法)~~
```cpp
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
int n,a[100005];
bool ck=0;
memset(a,0,sizeof(a));
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
{
if(i!=a[a[i]])
{
ck=1;
break;
}
}
if(ck) cout<<"NO";
else cout<<"YES";
}
```
by Ravener @ 2024-04-19 21:18:42