D. 构造回文
时间限制:2 秒
内存限制:256 兆字节
给定一个长度为 n 的数组 a 和一个整数 k。你可以执行任意次以下操作:
- 选择两个整数 l 和 r(1≤l≤r≤∣a∣)满足 r−l+1≥k。
- 然后,选择一个下标 i(l≤i≤r),使得 ai 是子数组 [al,al+1,…,ar] 中第 k 小的数。如果存在多个这样的 i,你可以任选其一。例如,a=[1,2,2,1,3],l=1,r=5,k=3,那么可能的下标 i 是 2 和 3。
- 然后,从 a 中删除 ai,并将剩余部分拼接起来。
判断是否可以通过任意次操作(包括零次)得到一个回文数组∗。注意,空数组视为回文。
∗ 数组 b=[b1,b2,…,bm] 是回文,当且仅当对于每个 1≤i≤m,有 bi=bm+1−i。
输入
每个测试包含多个测试用例。第一行包含测试用例数 t(1≤t≤104)。
每个测试用例的第一行包含两个整数 n 和 k(1≤k≤n≤2⋅105)。
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤n)—— 数组 a。
保证所有测试用例的 n 之和不超过 2⋅105。
输出
对于每个测试用例,如果可能通过操作得到回文数组,则输出 "YES",否则输出 "NO"。
输出大小写不敏感(例如 "yEs"、"yes"、"Yes"、"YES" 均视为肯定回答)。
样例
输入
8
5 3
5 4 3 4 5
4 1
1 1 2 1
6 6
2 3 4 5 3 2
5 4
5 2 4 3 1
8 5
4 7 1 2 3 1 3 4
5 4
1 2 1 2 2
3 3
1 2 2
4 4
2 1 2 2
输出
YES
YES
YES
NO
NO
YES
NO
YES
说明
- 第一个测试用例:a 本身已经是回文。
- 第二个测试用例:可以通过两次操作得到回文:[1,1,2,1]→[1,2,1]→[1,1]。
- 第三个测试用例:可以通过一次操作得到回文:[2,3,4,5,3,2]→[2,3,4,3,2]。
- 第四个和第五个测试用例:可以证明无论如何操作都无法得到回文。