#CF2147F. 交换查询

交换查询

F. 交换查询

每次测试时间限制: 22
每次测试内存限制: 256256 兆字节

你在市场上有两个商人,他们分别对 nn 个不同的物品有一个价值排序,用两个排列 ppss 表示。

  • pip_i 表示第一个商人对物品 ii 的排名(数值越小表示越喜欢)。
  • sis_i 表示第二个商人对物品 ii 的排名。

如果你手上有物品 ii,你可以用它向第一个商人换取物品 jj,当且仅当 pi>pjp_i > p_j(即第一个商人认为 jjii 更好)。
类似地,你可以用第二个商人换取物品 jj,当且仅当 si>sjs_i > s_j

我们称物品 ii 至少和物品 jj 一样有价值,如果存在一种交换序列(可能为空,每次使用任意一个商人),从物品 ii 开始,最终得到物品 jj
假设商人拥有无限多的物品副本(即换到的物品不会消失)。

市场会不断更新。你会收到 qq 个查询,每个查询交换排列 ppss 中的两个位置。
每次更新后,你需要输出满足“物品 ii 至少和物品 jj 一样有价值”的有序对 (i,j)(i, j) 的数量(1i,jn1 \le i, j \le n)。


输入

每个测试包含多个测试用例。
第一行包含一个整数 tt1t1041 \le t \le 10^4),表示测试用例的数量。

每个测试用例:

  • 第一行包含两个整数 nnqq2n1052 \le n \le 10^51q1051 \le q \le 10^5)。
  • 接下来两行分别包含 nn 个整数,表示初始排列 ppss
  • 接下来 qq 行,每行三个整数 tp,i,jtp, i, jtp{1,2}tp \in \{1,2\}1i,jn1 \le i, j \le niji \ne j):
    • tp=1tp = 1,交换 pip_ipjp_j
    • tp=2tp = 2,交换 sis_isjs_j

保证所有测试用例的 nn 之和不超过 10510^5qq 之和不超过 10510^5


输出

对于每个测试用例,输出 qq 行,第 kk 行包含一个整数——经过前 kk 次更新后,满足条件的 (i,j)(i, j) 对的数量。


示例

输入:

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

输出:

6
9
9
12
11

注释

第一个测试用例n=3n=3):
初始 p=[1,2,3],s=[3,2,1]p=[1,2,3], s=[3,2,1]

  • 第一次更新(tp=2,i=1,j=3tp=2,i=1,j=3):交换 s1s_1s3s_3,得到 s=[1,2,3]s=[1,2,3]。此时两个排列都是恒等排列,即 p=[1,2,3],s=[1,2,3]p=[1,2,3], s=[1,2,3]
    满足条件的对:只有那些 ii 能到达 jjiji \ge j 吗?实际上根据规则,你可以用第一个商人换到更小的 pp 值,用第二个商人换到更小的 ss 值。由于两者都是升序,只能从大的 pp 和大的 ss 往小的走。
    具体来说,可行的对是 (1,1),(2,1),(2,2),(3,1),(3,2),(3,3)(1,1), (2,1), (2,2), (3,1), (3,2), (3,3),共 66 对。

  • 第二次更新(tp=2,i=1,j=3tp=2,i=1,j=3):再交换 s1s_1s3s_3,回到 s=[3,2,1]s=[3,2,1]
    此时 p=[1,2,3],s=[3,2,1]p=[1,2,3], s=[3,2,1]
    你可以从任何物品出发,通过两个商人互相配合,到达任何物品。所以所有 3×3=93\times3=9 对都可行。

  • 第三次更新(tp=1,i=1,j=2tp=1,i=1,j=2):交换 p1p_1p2p_2,得到 p=[2,1,3],s=[3,2,1]p=[2,1,3], s=[3,2,1]
    仍然可以到达任何物品,所以还是 99 对。

第二个测试用例n=4n=4):初始 p=[3,2,4,1],s=[3,1,4,2]p=[3,2,4,1], s=[3,1,4,2]

  • 第一次更新(tp=1,i=1,j=3tp=1,i=1,j=3):交换 p1p_1p3p_3,得 p=[4,2,3,1],s=[3,1,4,2]p=[4,2,3,1], s=[3,1,4,2],输出 1212
  • 第二次更新(tp=2,i=1,j=3tp=2,i=1,j=3):交换 s1s_1s3s_3,得 p=[4,2,3,1],s=[4,1,3,2]p=[4,2,3,1], s=[4,1,3,2],输出 1111