#B1413. 小朋友编号换位查询

小朋友编号换位查询

【题目描述】

有 nn 个小朋友站成一排,编号为 11 到 nn。

最开始,第 ii 个小朋友站在位置 aia_i。

题目保证 11 到 nn 的每个位置都恰好站了一个小朋友。

接下来发生 mm 件事情,每件事情为以下三种之一:

  • 交换某两个小朋友当前站的位置。
  • 询问某个小朋友当前站在第几个位置。
  • 询问某个位置上当前站的是哪个小朋友。

【输入描述】

第一行输入两个整数 n,mn,m,表示小朋友数量和事情数量。

第二行输入 nn 个整数 a1,a2,…,ana_1,a_2,\ldots,a_n,其中 aia_i 表示第 ii 个小朋友初始站在的位置。

接下来 mm 行,每行表示一件事情,格式为以下三种之一:

  • 1 x y:交换小朋友 xx 和小朋友 yy 当前站的位置。
  • 2 x:询问小朋友 xx 当前站在第几个位置。
  • 3 p:询问第 pp 个位置上当前站的是哪个小朋友。

保证:

  • 1≤n,m≤2×1051\le n,m\le 2\times 10^5;
  • 1≤ai≤n1\le a_i\le n;
  • a1,a2,…,ana_1,a_2,\ldots,a_n 是 11 到 nn 的一个排列;
  • 对于操作 1 x y,保证 1≤x,y≤n1\le x,y\le n;
  • 对于操作 2 x,保证 1≤x≤n1\le x\le n;
  • 对于操作 3 p,保证 1≤p≤n1\le p\le n。

【输出描述】

对于每个询问操作输出一行,表示对应答案。


【样例 1】

【样例 1 输入】

5 6
2 4 1 5 3
2 3
3 4
1 2 5
2 5
3 4
2 2

【样例 1 输出】

1
2
4
5
3

【样例 1 解释】

初始时小朋友 33 在位置 11,位置 44 上是小朋友 22。

交换小朋友 22 和 55 后,小朋友 55 到位置 44,小朋友 22 到位置 33。


【样例 2】

【样例 2 输入】

4 7
1 2 3 4
3 1
1 1 4
2 1
3 1
1 2 3
2 3
3 2

【样例 2 输出】

1
4
4
2
3

【数据规模与约定】

测试点编号 分数 特殊性质
1 ~ 8 40 1≤n,m≤10001\le n,m\le 1000
9 ~ 10 60 1≤n,m≤2×1051\le n,m\le 2\times 10^5