#CF2138B. 安蒂亚穆尼想要学习交换操作
安蒂亚穆尼想要学习交换操作
题目描述
对于一个长度为 的数组 ,你可以执行以下两种操作:
- 选择一个下标 ,交换 和 的值。
- 选择一个下标 ,交换 和 的值。
限制:操作 最多只能执行一次。
我们定义:
- :使用操作1 + 操作2 将数组 排序为非递减顺序所需的最小操作次数。
- :仅使用操作1 将数组 排序为非递减顺序所需的最小操作次数。
如果数组 满足 ,则称 是完美数组。 换句话说:允许使用操作2 并不会比仅使用相邻交换(操作1)减少排序所需的操作次数。
给定一个长度为 的排列 ,你需要回答 个询问。 每个询问包含两个整数 (),代表子数组 。 对于每个询问,判断这个子数组是否是完美数组。
补充定义:
- 长度为 的排列:包含 所有不重复整数的数组。
- 子数组 :包含从下标 到 的所有元素,即 。
输入格式
输入包含多组测试数据。 第一行输入测试数据组数 ()。
每组测试数据:
- 第一行输入两个整数 (),分别表示数组长度和询问数量。
- 第二行输入 个整数 (),表示排列 。
- 接下来 行,每行输入两个整数 (),表示询问的子数组左右端点。
保证:所有测试数据的 之和与 之和均不超过 。
输出格式
对于每组测试数据的每个询问:
- 如果子数组 是完美数组,输出
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
样例解释(第一个测试用例)
- 询问 :子数组 已有序,,是完美数组,输出
YES。 - 询问 :子数组
- (使用1次操作2+3次操作1完成排序);
- (仅用相邻交换需要6次);
- ,输出
NO。
- 询问 :子数组
- (直接使用1次操作2完成排序);
- (仅用相邻交换需要3次);
- ,输出
NO。