CF2085F2.Serval and Colorful Array (Hard Version)
省选/NOI-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是该问题的困难版本。两个版本的区别在于此版本中 n≤4⋅105。仅当您解决了该问题的所有版本时才能进行 hack。
Serval 有一个魔法数 k(k≥2)。我们称数组 r 为 colorful 当且仅当:
- r 的长度为 k,且
- 1 到 k 之间的每个整数在 r 中恰好出现一次。
给定一个由 n 个介于 1 到 k 的整数组成的数组 a。保证 1 到 k 之间的每个整数在 a 中至少出现一次。您可以对 a 执行以下操作:
- 选择一个下标 i(1≤i<n),然后交换 ai 和 ai+1。
求使得 a 中至少存在一个 colorful 子数组∗所需的最小操作次数。可以证明在题目约束下这总是可行的。
∗数组 b 是数组 a 的子数组,当且仅当 b 可以通过从 a 的开头和结尾删除若干(可能为零或全部)元素得到。
输入格式
每个测试包含多个测试用例。第一行输入测试用例数 t(1≤t≤1000)。接下来描述每个测试用例。
每个测试用例的第一行包含两个整数 n 和 k(2≤k≤n≤4⋅105)——数组 a 的长度和 Serval 的魔法数。
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤k)——数组 a 的元素。保证 1 到 k 之间的每个整数在 a 中至少出现一次。
保证所有测试用例的 n 之和不超过 4⋅105。
输出格式
对于每个测试用例,输出一个整数 —— 使得 a 中至少存在一个 colorful 子数组所需的最小操作次数。
输入输出样例
输入#1
6 3 2 1 2 1 7 3 2 1 1 3 1 1 2 6 3 1 1 2 2 2 3 6 3 1 2 2 2 2 3 10 5 5 1 3 1 1 2 2 4 1 3 9 4 1 2 3 3 3 3 3 2 4
输出#1
0 1 2 3 4 5
说明/提示
第一个测试案例中,由于子数组 [a1,a2]=[1,2] 和 [a2,a3]=[2,1] 已经是 colorful 的,因此无需执行任何操作。答案为 0。
第二个测试案例中,我们可以交换 a1 和 a2 得到 [1,2,1,3,1,1,2],其中包含一个 colorful 子数组 [a2,a3,a4]=[2,1,3]。由于原数组初始时没有 colorful 子数组,因此答案为 1。
翻译由 DeepSeek R1 完成
输入解题思路,AI测评打分。不知道怎么写?