CF2138B.Antiamuny Wants to Learn Swap

普及+/提高

通过率:0%

AC君温馨提醒

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

题目描述

对于长度为 mm 的数组 bb,你可以进行以下两种操作:

  1. 选择一个下标 1≤i≤m−11\le i\le m-1,然后交换 bib_i 和 bi+1b_{i+1} 的值。
  2. 选择一个下标 1≤i≤m−21\le i\le m-2,然后交换 bib_i 和 bi+2b_{i+2} 的值。

但是,你至多只能执行一次操作 22。

我们定义 f(b)f(b) 表示将数组 bb 通过这两种操作排序为非递减序列所需的最小操作次数,g(b)g(b) 表示只使用操作 11(相邻交换)将数组 bb 排序为非递减序列所需的最小操作次数。

如果对每个 bb 都有 f(b)=g(b)f(b) = g(b),那么这个数组 bb 被称为“完美的”(即 perfect)。换句话说,能否使用操作 22 并不会减少数组 bb 排序所需的最小操作次数。

现给定一个长度为 nn 的排列 aa,你需要回答 qq 个询问。每个询问包含两个整数 ll 和 rr(1≤l≤r≤n1\le l\le r\le n),表示子数组 a[l…r]a[l\ldots r]。对于每个查询,判断子数组 a[l…r]a[l\ldots r] 是否为完美的。

注∗^{\ast}:长度为 nn 的排列是指包含 11 到 nn 的 nn 个互不相同的整数。例如,[2,3,1,5,4][2,3,1,5,4] 是一个排列,但 [1,2,2][1,2,2] 不是(数字 22 重复),[1,3,4][1,3,4] 也不是排列(n=3n=3 但包含 44)。

注†^{\dagger}:子数组 a[l…r]a[l\ldots r] 包含从下标 ll 到 rr 的所有元素,即 [al,al+1,al+2,…,ar][a_l, a_{l+1}, a_{l+2}, \ldots, a_r]。

输入格式

每个测试包含多组测试数据。第一行输入一个整数 tt(1≤t≤5×1041\le t\le 5\times10^4),表示测试组数。

每组测试数据第一行输入两个整数 nn 和 qq(1≤n,q≤5×1051\le n, q\le 5\times 10^5)——排列 aa 的长度和查询数量。

接下来一行输入 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(1≤ai≤n1\le a_i \le n)——排列 aa 的各个值。

接下来的 qq 行,每行输入两个整数 ll 和 rr(1≤l≤r≤n1\le l\le r\le n),表示查询的子数组为 a[l…r]a[l\ldots r]。

保证所有测试数据中 nn 之和与 qq 之和不超过 5×1055\times 10^5。

输出格式

对于每个查询,如果子数组 a[l…r]a[l\ldots r] 是完美的,输出 "YES",否则输出 "NO"。

你可以使用任意大小写形式的 YES/NO。例如 "yEs", "yes", "Yes", "YES" 都视为是肯定回答。

输入输出样例

  • 输入#1

    2
    5 5
    1 5 4 3 2
    1 2
    1 5
    3 5
    1 4
    2 5
    5 5
    3 2 1 4 5
    1 1
    4 5
    1 4
    2 5
    3 4

    输出#1

    YES
    NO
    NO
    NO
    NO
    YES
    YES
    NO
    YES
    YES

说明/提示

在第一个测试用例中:

  • 查询 1:a[1…2]=[1,5]a[1\ldots2]=[1,5] 已经是递增排序,所以 f(a[1…2])=g(a[1…2])=0f(a[1\ldots2])=g(a[1\ldots2])=0,该子数组是完美的。
  • 查询 2:a[1…5]=[1,5,4,3,2]a[1\ldots5]=[1,5,4,3,2]。f(a[1…5])=4f(a[1\ldots5])=4,可以如下操作:

    [1,5,4,3,2]→操作2[1,3,4,5,2]→操作1[1,3,4,2,5]→操作1[1,3,2,4,5]→操作1[1,2,3,4,5][1,\textbf{5},4,\textbf{3},2] \xrightarrow{\text{操作2}} [1,3,4,\textbf{5},\textbf{2}] \xrightarrow{\text{操作1}} [1,3,\textbf{4},\textbf{2},5]\xrightarrow{\text{操作1}} [1,\textbf{3},\textbf{2},4,5] \xrightarrow{\text{操作1}} [1,2,3,4,5]

    而 g(a[1…5])=6g(a[1\ldots5])=6,至少需要 66 次相邻交换。由于 f(a[1…5])≠g(a[1…5])f(a[1\ldots 5])\neq g(a[1\ldots 5]),所以该子数组不是完美的。
  • 查询 3:a[3…5]=[4,3,2]a[3\ldots5]=[4,3,2]。f(a[3…5])=1f(a[3\ldots5])=1,可以如下操作:

    [4,3,2]→操作2[2,3,4][\textbf{4},3,\textbf{2}] \xrightarrow{\text{操作2}} [2,3,4]

    而 g(a[3…5])=3g(a[3\ldots5])=3,至少需要 33 次相邻交换。由于 f(a[3…5])≠g(a[3…5])f(a[3\ldots5])\neq g(a[3\ldots5]),所以该子数组不是完美的。

由 ChatGPT 5 翻译

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

首页