CF1408H Rainbow Triples
题目描述
给定一个非负整数序列 $a_1, a_2, \ldots, a_n$。
你需要找到最大的整数 $m$,使得存在 $m$ 个三元组 $(i_1, j_1, k_1)$,$(i_2, j_2, k_2)$,…,$(i_m, j_m, k_m)$,满足:
- 对于每个 $p$,$1 \leq i_p < j_p < k_p \leq n$;
- $a_{i_p} = a_{k_p} = 0$,$a_{j_p} \neq 0$;
- 所有 $a_{j_1}, a_{j_2}, \ldots, a_{j_m}$ 两两不同;
- 所有 $i_1, j_1, k_1, i_2, j_2, k_2, \ldots, i_m, j_m, k_m$ 互不相同。
输入格式
输入的第一行包含一个整数 $t$($1 \leq t \leq 500\,000$),表示测试用例的数量。
每个测试用例的第一行包含一个整数 $n$($1 \leq n \leq 500\,000$)。
第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($0 \leq a_i \leq n$)。
所有测试用例中 $n$ 的总和不超过 $500\,000$。
输出格式
对于每个测试用例,输出一个整数 $m$,表示你能找到的满足条件的三元组的最大数量。
说明/提示
在前两个测试用例中,元素数量不足以组成一个三元组,因此答案为 $0$。
在第三个测试用例中,可以选择一个三元组 $(1, 2, 3)$。
在第四个测试用例中,可以选择两个三元组 $(1, 3, 5)$ 和 $(2, 4, 6)$。
在第五个测试用例中,可以选择一个三元组 $(1, 2, 3)$。不能选择两个三元组 $(1, 2, 3)$ 和 $(4, 5, 6)$,因为 $a_2 = a_5$。
由 ChatGPT 4.1 翻译