AT_abc399_d [ABC399D] Switch Seats

题目描述

[problemUrl]: https://atcoder.jp/contests/abc399/tasks/abc399_d $N$ 组数字对(称为“情侣对”)排成一列。 请统计满足以下所有条件的 **两对不同的情侣对** $(a, b)$ 的组数: 1. 在原序列中,$a$ 的两个出现位置不邻接。 2. 在原序列中,$b$ 的两个出现位置不邻接。 3. 通过执行以下操作(次数不限),可以使 $a$ 的两个出现位置邻接,同时 $b$ 的两个出现位置也邻接: - 选择两个位置 $(i, j)$ 满足 $A_i = a$ 且 $A_j = b$,并交换这两个位置的值。 给定一个长度为 $2N$ 的序列 $A = (A_1, A_2, \dots, A_{2N})$,其中每个 $1, 2, \dots, N$ 恰好出现两次。 对于 $T$ 个测试用例,分别输出答案。

输入格式

输入通过标准输入给出,格式如下: > $T$ > $\mathrm{case}_1$ > $\mathrm{case}_2$ > $\vdots$ > $\mathrm{case}_T$ 每个测试用例的格式为: > $N$ $A_1$ $A_2$ $\dots$ $A_{2N}$

输出格式

输出 $T$ 行,每行对应一个测试用例的答案。

说明/提示

### 约束条件 - $1 \leq T \leq 2 \times 10^5$ - $1 \leq N \leq 2 \times 10^5$ - $1 \leq A_i \leq N$ - 每个 $1, 2, \dots, N$ 在 $A$ 中恰好出现两次 - 所有测试用例的 $N$ 总和不超过 $2 \times 10^5$ - 输入值均为整数 ### 样例解释 1 考虑第一个测试用例 $(a, b) = (1, 2)$: - 原序列中 $1$ 的两个出现位置不邻接。 - 原序列中 $2$ 的两个出现位置不邻接。 - 选择 $(i, j) = (1, 6)$ 交换 $A_1$ 和 $A_6$ 后,$1$ 的两个位置邻接,$2$ 的两个位置也邻接。 因此满足条件的二元组 $(a, b)$ 仅有 $(1, 2)$ 这一组。 翻译由 DeepSeek R1 完成