题目描述
给定一个 (1,…,N) 的排列 P=(P1,…,PN)。
按顺序处理 Q 个询问。询问有以下两种类型:
1 x y:交换 Px 与 Py 的值。
2:构造满足下述条件的 (1,…,N) 的排列 P′=(P1′,…,PN′),并将 P1,…,PN 的值分别替换为 P1′,…,PN′。(可以证明这样的 P′ 唯一存在。)
- 对于每个满足 1≤i≤N 的整数 i,都有 PPi′=i。
输出处理完所有询问后 P1,…,PN 的值。
数据范围
- 2≤N≤5×105
- 1≤Q≤5×105
- (P1,…,PN) 是 (1,…,N) 的一个排列。
- 对于类型 1 的询问,1≤x<y≤N。
- 所有输入值均为整数。
输入格式
输入以以下格式从标准输入给出:
- N Q
- P1 P2 ⋯ PN
- query1
- ⋮
- queryQ
其中 queryq 表示第 q 个询问,为以下两种格式之一:
输出格式
在一行内输出处理完所有询问后 P1,…,PN 的值,以空格分隔。
5 5
2 1 3 5 4
1 2 4
2
1 2 3
1 3 4
2
4 5 2 1 3
在处理完每个询问的时点,P1,…,PN 的值如下:
- 处理完第 1 个询问后,P=(2,5,3,1,4)。
- 处理完第 2 个询问后,P=(4,1,3,5,2)。
- 处理完第 3 个询问后,P=(4,3,1,5,2)。
- 处理完第 4 个询问后,P=(4,3,5,1,2)。
- 处理完第 5 个询问后,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,Q≤2000。
- 子任务 2(280 分):无特殊限制。