CF2064B.Variety is Discouraged

普及-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

定义任意数组 bb 的分数为 bb 的长度减去其中不同元素的数量。例如:

  • 数组 [1,2,2,4][1, 2, 2, 4] 的分数为 11,因为它长度为 44 且只有 33 个不同元素(11、22、44)。
  • 数组 [1,1,1][1, 1, 1] 的分数为 22,因为它长度为 33 且只有 11 个不同元素(11)。
  • 空数组的分数为 00。

给定一个数组 aa。你需要最多一次移除一个非空的连续子数组。

更正式地说,你最多可以执行以下操作一次:

  • 选择两个整数 ll 和 rr(1≤l≤r≤n1 \le l \le r \le n)
  • 从 aa 中删除连续子数组 [al,…,ar][a_l,\ldots,a_r](即将 aa 替换为 [a1,…,al−1,ar+1,…,an][a_1,\ldots,a_{l - 1},a_{r + 1},\ldots,a_n])

请输出一个操作,使得操作后 aa 的分数最大。若存在多个答案,输出能使操作后数组长度最短的任一解;若仍有多个答案,可输出任一。

输入格式

第一行包含一个整数 tt(1≤t≤1041 \le t \le 10^4)——测试用例数量。

每个测试用例的第一行包含一个整数 nn(1≤n≤2⋅1051 \le n \le 2 \cdot 10^5)——数组 aa 的长度。

每个测试用例的第二行包含 nn 个整数 a1,a2,…,ana_1,a_2,\ldots,a_n(1≤ai≤n1 \le a_i \le n)。

所有测试用例的 nn 之和不超过 2⋅1052 \cdot 10^5。

输出格式

对于每个测试用例,若选择不执行操作,输出 00。

否则输出两个整数 ll 和 rr(1≤l≤r≤n1 \le l \le r \le 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−1=01-1=0。
  • 删除 l=1l=1,r=1r=1 的子数组:删除唯一元素后得到空数组,分数为 00。

因此最大可能分数为 00。但需要额外最小化数组长度,故必须输出第二种选择 l=r=1l=r=1。注意第一种不操作的方案是错误的,因为它保留的数组长度更长。

第二个测试用例未选择任何子数组,操作后数组仍为 [1,1,1,1,1][1, 1, 1, 1, 1]。其长度为 55 且有 11 个不同元素,分数为 5−1=45 - 1 = 4。可以证明这是能最大化分数且长度最短的数组。

第三个测试用例选择删除子数组 [2,1, 3,2][2, \text{\color{red}{1,\ 3}}, 2],操作后数组变为 [2,2][2, 2]。其长度为 22 且有 11 个不同元素,分数为 2−1=12 - 1 = 1。可以证明这是能最大化分数且长度最短的数组。

翻译由 DeepSeek R1 完成

输入解题思路,AI测评打分。不知道怎么写?

首页