CF2124D Make a Palindrome

题目描述

你被给定了一个长度为 $ n $ 的序列 $ a $ 以及一个数 $ k $,你可以进行如下操作任意次: - 选择两个整数 $ l $ 和 $ r $ $ (1 \le l \le r \le |a|) $ 满足 $ r-l+1 \geq k $ 。 - 然后,选择一个整数 $ i $ $ (l\leq i \leq r) $ 使得 $ a_i $ 是 $ [a_l,a_{l+1},\ldots,a_r] $ 中第 $ k $ 小的数。如果有多个满足条件 $ i $,你可以任选其一。例如,当 $ a = [1, 2, 2, 1, 3], l = 1, r = 5 $ 且 $ k = 3 $ 时,$ i $ 可能是 $ 2 $ 或 $ 3 $ 。 - 最后,从 $ a $ 中删除 $ a_i $,连接序列的剩余部分。 求出原序列是否能在若干次操作后变为回文串 $ ^{\text{∗}} $ 。注意,空串也被视为回文串。 $ ^{\text{∗}} $ 若序列 $ b=[b_1,b_2,\ldots,b_m] $ 是一个回文串,那么对于 $ 1 \leq i \leq m $,$ b_i=b_{m+1-i} $ 。

输入格式

每组输入包含多组数据,其中第一行一个整数 $ t $ ( $ 1 \le t \le 10^4 $ ) 表示测试数据组数。每组测试数据格式如下: 第一行包含两个整数 $ n $ 和 $ k $ ( $ 1 \leq k \leq n \leq 2\cdot 10^5 $ ) 。 第二行包含 $ n $ 个整数 $ a_1,a_2,\ldots,a_n $ ( $ 1 \leq a_i \leq n $ ) 表示序列 $ a $ 。 保证每组输入中所有 $ n $ 的和不超过 $ 2\cdot 10^5 $ 。

输出格式

对于每组数据,如果可以通过若干次操作变为回文串,输出 `YES`,否则输出 `NO`。你可以输出答案的任意一种大小写变形。例如,`yEs`,`yes`,`Yes` 和 `YES` 也被视为肯定的答复。

说明/提示

在第一组样例中,$ a $ 已经是回文串了。 在第一组样例中,我们可以进行如下两次操作:$ [\mathbf{1,1},2,1]\rightarrow [1,\mathbf{2},1]\rightarrow[1,1] $ 在第三组样例中,我们可以只进行一次操作:$ [\mathbf{2,3,4,5,3,2}]\rightarrow[2,3,4,3,2] $ 在第四组样例中,无论如何进行操作,都无法形成回文串。