CF2064B.Variety is Discouraged
普及-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
定义任意数组 b 的分数为 b 的长度减去其中不同元素的数量。例如:
- 数组 [1,2,2,4] 的分数为 1,因为它长度为 4 且只有 3 个不同元素(1、2、4)。
- 数组 [1,1,1] 的分数为 2,因为它长度为 3 且只有 1 个不同元素(1)。
- 空数组的分数为 0。
给定一个数组 a。你需要最多一次移除一个非空的连续子数组。
更正式地说,你最多可以执行以下操作一次:
- 选择两个整数 l 和 r(1≤l≤r≤n)
- 从 a 中删除连续子数组 [al,…,ar](即将 a 替换为 [a1,…,al−1,ar+1,…,an])
请输出一个操作,使得操作后 a 的分数最大。若存在多个答案,输出能使操作后数组长度最短的任一解;若仍有多个答案,可输出任一。
输入格式
第一行包含一个整数 t(1≤t≤104)——测试用例数量。
每个测试用例的第一行包含一个整数 n(1≤n≤2⋅105)——数组 a 的长度。
每个测试用例的第二行包含 n 个整数 a1,a2,…,an(1≤ai≤n)。
所有测试用例的 n 之和不超过 2⋅105。
输出格式
对于每个测试用例,若选择不执行操作,输出 0。
否则输出两个整数 l 和 r(1≤l≤r≤n),表示被删除子数组的左右边界。
被删除的子数组应满足分数最大,且在满足该条件的所有解中选择能使数组长度最短的任一解。
输入输出样例
输入#1
3 1 1 5 1 1 1 1 1 4 2 1 3 2
输出#1
1 1 0 2 3
说明/提示
第一个测试用例有两种选择:
- 不操作:数组 [1] 的分数为 1−1=0。
- 删除 l=1,r=1 的子数组:删除唯一元素后得到空数组,分数为 0。
因此最大可能分数为 0。但需要额外最小化数组长度,故必须输出第二种选择 l=r=1。注意第一种不操作的方案是错误的,因为它保留的数组长度更长。
第二个测试用例未选择任何子数组,操作后数组仍为 [1,1,1,1,1]。其长度为 5 且有 1 个不同元素,分数为 5−1=4。可以证明这是能最大化分数且长度最短的数组。
第三个测试用例选择删除子数组 [2,1, 3,2],操作后数组变为 [2,2]。其长度为 2 且有 1 个不同元素,分数为 2−1=1。可以证明这是能最大化分数且长度最短的数组。
翻译由 DeepSeek R1 完成
输入解题思路,AI测评打分。不知道怎么写?