#P6498. [COCI 2016/2017 #2] Zamjene

    ID: 7272 远端评测题 2000~7000ms 500MiB 尝试: 0 已通过: 0 显示难度提高 上传者: 标签>2016O2优化COCI(克罗地亚)

[COCI 2016/2017 #2] Zamjene

背景

警告:滥用本题评测将被封号。

题目描述

Dominik 构造了一个含有 nn 个元素的数组 p1,p2,…,pnp_1,p_2,\dots,p_n,和对其排序得到的数组 q1,q2,…,qnq_1,q_2,\dots,q_n。

此外,他还定义了「可交换集」。若无序数对 (a,b)(a,b) 属于「可交换集」,则他可以交换 pa,pbp_a,p_b 的位置。『通过「可交换集」』,即为通过若干次这样的交换。

现有四种操作:

  • 操作 11:

    格式:1 a b。

    交换 pa,pbp_a,p_b 的位置(不受「可交换集」限制)。

  • 操作 22:

    格式:2 a b。

    将无序数对 (a,b)(a,b) 加入「可交换集」。

  • 操作 33:

    格式:3。

    判断能否通过「可交换集」完成对数组 pp 的排序。

  • 操作 44:

    格式:4。

    若数组 pp 中的第 xx 个元素能通过「可交换集」移至第 yy 位,则称 x,yx,y 是相连的。其中 xx 可能等于 yy。

    将所有与 xx 相连的 yy 构成的集合称作 xx 的「云」。若一朵「云」能通过「可交换集」使得「云」中任意的 ii 满足 pi=qip_i=q_i,则称这朵「云」是「祥云」。

    计算有多少组无序数对 (a,b)(a,b) 满足:

    • 1≤a,b≤n1\le a,b\le n 且 a≠ba\not=b。
    • a,ba,b 不是相连的。
    • aa 的「云」与 bb 的「云」均不是「祥云」。
    • 将无序数对 (a,b)(a,b) 加入「可交换集」后,aa 的「云」变为「祥云」。

请你帮助 Dominik 完成这些操作。

输入格式

第一行两个整数 n,qn,q,表示数组 pp 中元素的个数和操作次数。

第二行 nn 个整数 pip_i。

接下来 qq 行按以下格式给出:

  1. 一个整数 tt,表示操作的类型。

  2. 若 tt 为 11 或 22,接下来给出两个不同的整数 a,ba,b。

输出格式

  • 对于每一次操作 33:

    若能通过「可交换集」完成对数组 pp 的排序,输出一行 DA。

    否则,输出一行 NE。

  • 对于每一次操作 44:

    输出一行,一个整数,表示满足条件的无序数对 (a,b)(a,b) 组数。

3 5
1 3 2
4
3
2 2 3
4
3 
1
NE
0
DA 
5 5
4 2 1 4 4
3
4
1 1 3
3
4 
NE
1
DA
0 
4 10
2 1 4 3
3
4
1 1 2
3
4
2 2 3
2 1 2
4
2 3 4
3 
NE
2
NE
1
3
DA 

提示

样例 1 解释

  • 第一次操作:仅有无序数对 (2,3)(2,3) 满足要求。
  • 第二次操作:不能通过「可交换集」完成对数组 pp 的排序。
  • 第三次操作:将无序数对 (2,3)(2,3) 加入「可交换集」。
  • 第四次操作:不存在满足要求的无序数对。
  • 第五次操作:交换 p2,p3p_2,p_3,即可通过「可交换集」完成对数组 pp 的排序。

数据规模与约定

对于 100%100\% 的数据,1≤n,q≤1061\le n,q\le 10^6,1≤pi≤1061\le p_i\le 10^6,1≤t≤41\le t\le 4,1≤a,b≤n1\le a,b\le n 且 a≠ba\not=b。


说明

题目译自 COCI2016-2017 CONTEST #2 T5 Zamjene。