#CF2138B. 安蒂亚穆尼想要学习交换操作

安蒂亚穆尼想要学习交换操作

题目描述

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

  1. 选择一个下标 1im11 \le i \le m-1,交换 bib_ibi+1b_{i+1} 的值。
  2. 选择一个下标 1im21 \le i \le m-2,交换 bib_ibi+2b_{i+2} 的值。

限制:操作 22 最多只能执行一次

我们定义:

  • f(b)f(b):使用操作1 + 操作2 将数组 bb 排序为非递减顺序所需的最小操作次数
  • g(b)g(b)仅使用操作1 将数组 bb 排序为非递减顺序所需的最小操作次数

如果数组 bb 满足 f(b)=g(b)f(b) = g(b),则称 bb完美数组。 换句话说:允许使用操作2 并不会比仅使用相邻交换(操作1)减少排序所需的操作次数。

给定一个长度为 nn排列 aa,你需要回答 qq 个询问。 每个询问包含两个整数 l,rl, r1lrn1 \le l \le r \le n),代表子数组 a[lr]a[l \dots r]。 对于每个询问,判断这个子数组是否是完美数组

补充定义:

  • 长度为 nn 的排列:包含 1n1 \sim n 所有不重复整数的数组。
  • 子数组 a[lr]a[l \dots r]:包含从下标 llrr 的所有元素,即 [al,al+1,al+2,,ar][a_l, a_{l+1}, a_{l+2}, \dots, a_r]

输入格式

输入包含多组测试数据。 第一行输入测试数据组数 tt1t51041 \le t \le 5 \cdot 10^4)。

每组测试数据:

  1. 第一行输入两个整数 n,qn, q1n,q51051 \le n, q \le 5 \cdot 10^5),分别表示数组长度和询问数量。
  2. 第二行输入 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n1ain1 \le a_i \le n),表示排列 aa
  3. 接下来 qq 行,每行输入两个整数 l,rl, r1lrn1 \le l \le r \le n),表示询问的子数组左右端点。

保证:所有测试数据的 nn 之和与 qq 之和均不超过 51055 \cdot 10^5


输出格式

对于每组测试数据的每个询问:

  • 如果子数组 a[lr]a[l \dots r] 是完美数组,输出 YES
  • 否则,输出 NO

输出不区分大小写(yes/Yes/YES 均合法)。


样例输入

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

样例输出

YES
NO
NO
NO
NO
YES
YES
NO
YES
YES

样例解释(第一个测试用例)

  1. 询问 [1,2][1,2]:子数组 [1,5][1,5] 已有序,f=g=0f=g=0,是完美数组,输出 YES
  2. 询问 [1,5][1,5]:子数组 [1,5,4,3,2][1,5,4,3,2]
    • f=4f=4(使用1次操作2+3次操作1完成排序);
    • g=6g=6(仅用相邻交换需要6次);
    • fgf \neq g,输出 NO
  3. 询问 [3,5][3,5]:子数组 [4,3,2][4,3,2]
    • f=1f=1(直接使用1次操作2完成排序);
    • g=3g=3(仅用相邻交换需要3次);
    • fgf \neq g,输出 NO