#ABC470D. 逆排列与交换 / Inverse and Swap

逆排列与交换 / Inverse and Swap

题目描述

给定一个 (1,,N)(1,\dots,N) 的排列 P=(P1,,PN)P = (P_1, \dots, P_N)

按顺序处理 QQ 个询问。询问有以下两种类型:

  • 1 x y:交换 PxP_xPyP_y 的值。
  • 2:构造满足下述条件的 (1,,N)(1,\dots,N) 的排列 P=(P1,,PN)P' = (P'_1, \dots, P'_N),并将 P1,,PNP_1,\dots,P_N 的值分别替换为 P1,,PNP'_1,\dots,P'_N。(可以证明这样的 PP' 唯一存在。)
    • 对于每个满足 1iN1 \leq i \leq N 的整数 ii,都有 PPi=iP_{P'_i} = i

输出处理完所有询问后 P1,,PNP_1,\dots,P_N 的值。

数据范围

  • 2N5×1052 \leq N \leq 5 \times 10^5
  • 1Q5×1051 \leq Q \leq 5 \times 10^5
  • (P1,,PN)(P_1,\dots,P_N)(1,,N)(1,\dots,N) 的一个排列。
  • 对于类型 1 的询问,1x<yN1 \leq x < y \leq N
  • 所有输入值均为整数。

输入格式

输入以以下格式从标准输入给出:

  • NN QQ
  • P1P_1 P2P_2 \cdots PNP_N
  • query1\mathrm{query}_1
  • \vdots
  • queryQ\mathrm{query}_Q

其中 queryq\mathrm{query}_q 表示第 qq 个询问,为以下两种格式之一:

  • 11 xx yy

  • 22

输出格式

在一行内输出处理完所有询问后 P1,,PNP_1,\dots,P_N 的值,以空格分隔。

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

在处理完每个询问的时点,P1,,PNP_1,\dots,P_N 的值如下:

  • 处理完第 1 个询问后,P=(2,5,3,1,4)P = (2,5,3,1,4)
  • 处理完第 2 个询问后,P=(4,1,3,5,2)P = (4,1,3,5,2)
  • 处理完第 3 个询问后,P=(4,3,1,5,2)P = (4,3,1,5,2)
  • 处理完第 4 个询问后,P=(4,3,5,1,2)P = (4,3,5,1,2)
  • 处理完第 5 个询问后,P=(4,5,2,1,3)P = (4,5,2,1,3)
7 4
3 7 5 6 4 2 1
2
2
2
2
3 7 5 6 4 2 1
10 8
7 3 2 4 8 5 10 9 1 6
2
1 4 10
1 6 9
2
1 9 10
1 3 10
2
1 4 6
3 10 2 8 6 7 1 5 9 4

子任务设置

  • 子任务 1(120 分):N,Q2000N,Q \le 2000
  • 子任务 2(280 分):无特殊限制。