CF2030F.Orangutan Approved Subarrays

提高+/省选-

通过率:0%

AC君温馨提醒

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

题目描述

假设你有一个数组 bb。最初,你还有一个集合 SS,其中包含 bb 的所有不同元素。如果数组 bb 能通过重复执行以下操作被清空,则称其为“orangutan-approved”:

  • 每次操作,你可以选择下标 ll 和 rr(1≤l≤r≤∣b∣1 \leq l \leq r \leq |b|),使得 v=bl=bl+1=…=brv = b_l = b_{l+1} = \ldots = b_r,且 vv 在 SS 中。将 vv 从 SS 中移除,并同时移除所有 l≤i≤rl \leq i \leq r 的 bib_i。然后,将 br+1,br+2,…b_{r+1}, b_{r+2}, \ldots 重新编号为 bl,bl+1,…b_l, b_{l+1}, \ldots。

现在给定一个长度为 nn 的数组 aa 和 qq 个询问。

每个询问包含两个下标 ll 和 rr(1≤l≤r≤n1 \le l \le r \le n),你需要判断子数组 al,al+1,…,ara_l, a_{l+1}, \ldots, a_r 是否为“orangutan-approved”。

输入格式

第一行包含一个整数 tt(1≤t≤1041 \leq t \leq 10^4),表示测试用例的数量。

每个测试用例的第一行包含两个整数 nn 和 qq(1≤n,q≤2×1051 \leq n,q \leq 2 \times 10^5),分别表示数组 aa 的长度和询问数量。

接下来一行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(1≤ai≤n1 \leq a_i \leq n),表示数组 aa 的元素。

接下来的 qq 行,每行包含两个整数 ll 和 rr,表示每个询问的子数组区间端点(1≤l≤r≤n1 \leq l \leq r \leq n)。

保证所有测试用例中 nn 与 qq 的总和不超过 2×1052 \times 10^5。

输出格式

对于每个询问,如果从 ll 到 rr 的子数组是“orangutan-approved”,输出 "YES"(不带引号),否则输出 "NO"(不带引号)。

你可以用任意大小写输出 "YES" 和 "NO"(例如 "yES"、"yes"、"Yes" 都会被视为肯定回答)。

输入输出样例

  • 输入#1

    3
    4 2
    1 2 2 1
    1 4
    1 3
    5 3
    1 2 1 2 1
    2 5
    3 5
    1 3
    8 4
    1 2 3 2 1 3 2 3
    1 5
    2 8
    3 5
    6 8

    输出#1

    YES
    YES
    NO
    YES
    YES
    YES
    NO
    YES
    YES

说明/提示

在第一个测试用例的第一个询问中,答案是 YES。

  • 初始时,S={1,2}S=\{1,2\},b=[1,2,2,1]b=[1,2,2,1]。
  • 选择 l=2l=2 和 r=3r=3。由于 b2=b3=2b_2=b_3=2 且 22 在 SS 中,我们可以将 b2b_2 和 b3b_3 从数组中删除,同时将 22 从 SS 中删除。此时 SS 变为 {1}\{1\},数组变为 [1,1][1,1]。
  • 选择 l=1l=1 和 r=2r=2。由于 b1=b2=1b_1=b_2=1 且 11 在 SS 中,我们可以将 b1b_1 和 b2b_2 从数组中删除,同时将 11 从 SS 中删除。此时 SS 变为 {}\{\},数组变为空。
  • 由于数组已被清空,我们可以说原数组是“orangutan-approved”。

在第二个测试用例的第一个询问中,答案是 NO,因为可以证明子数组 [2,1,2,1][2,1,2,1] 无法通过任何有效操作序列被清空。

由 ChatGPT 4.1 翻译

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

首页