#CF2124A. 乱序删除
乱序删除
A. 乱序删除
时间限制:1 秒
内存限制:256 兆字节
如果一个长度为 的数组 满足以下性质,则称它为乱序数组:
- 令 是与 等长的数组,满足 (对 )。
- 将 按非递减顺序排序。
- 若对于所有 都有 ,则 是乱序数组。
例如:
- 若 ,排序后 ,由于所有位置 ,因此 是乱序数组。
- 若 ,排序后 ,由于 ,因此 不是乱序数组。
给定一个长度为 的数组 。在一次操作中,你可以从 中删除一个元素。每次删除后,剩余元素的相对顺序保持不变。
输出是否可以通过若干次(可能为零次)操作,使得剩余元素构成一个乱序数组。如果可能,输出任意一种可能的剩余数组。剩余数组必须非空。
输入
每个测试包含多个测试用例。第一行包含测试用例数 ()。
每个测试用例的第一行包含一个整数 ()—— 数组 的长度。
第二行包含 个整数 ()—— 数组 的元素。
输出
对于每个测试用例,如果可以通过操作使剩余数组成为乱序数组,则在新一行输出 "YES",否则输出 "NO"。
输出大小写不敏感(例如 "yEs"、"yes"、"Yes"、"YES" 均视为肯定回答)。
如果回答为 "YES",则再输出两行:
- 第一行包含一个整数 (),表示剩余数组的长度。
- 第二行包含 ,表示剩余数组的元素。必须保证 可以通过对 进行若干次删除操作得到,且 是乱序数组。
样例
输入
3
3
2 2 3
5
4 5 5 2 4
1
1
输出
NO
YES
4
4 5 2 4
NO
说明
在第二个测试用例中,可以删除一个 ,使数组变为 。可以验证该数组是乱序数组。这不是唯一的解 —— 原始数组 本身也是一个有效解。