#345. 中位数划分

中位数划分

题目描述

数组 b1,b2,bmb_1, b_2, \ldots b_m 的中位数记作 med(b1,b2,,bm)\operatorname{med}(b_1, b_2, \ldots, b_m),定义为数组 bb 中第 m2\left\lceil \frac{m}{2} \right\rceil 小的元素。

给定一个整数数组 a1,a2,,ana_1, a_2, \ldots, a_n 和一个整数 kk。你需要判断是否存在一对下标 1l<r<n1 \le l < r < n 满足:

$$\operatorname{med}(\operatorname{med}(a_1, a_2 \dots a_l), \operatorname{med}(a_{l + 1}, a_{l + 2} \dots a_r), \operatorname{med}(a_{r + 1}, a_{r + 2} \dots a_n)) \leq k. $$

换句话说,判断是否可以将数组分割为三个连续的子数组,使得这三个子数组中位数的中位数小于或等于 kk

输入格式

每个测试包含多个测试用例。第一行输入测试用例数量 tt1t1041 \le t \le 10^4)。接下来是各测试用例的描述。

每个测试用例的第一行包含两个整数 nnkk3n21053 \le n \le 2 \cdot 10^51k1091 \le k \le 10^9)——数组 aa 的长度和常数 kk

每个测试用例的第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n1ai1091 \le a_i \le 10^9)——数组 aa 的元素。

保证所有测试用例的 nn 之和不超过 21052 \cdot 10^5

输出格式

对于每个测试用例,如果存在满足条件的分割,输出 "YES",否则输出 "NO"。

输入输出样例

6
3 2
3 2 1
3 1
3 2 1
6 3
8 5 3 1 6 4
8 7
10 7 12 16 3 15 6 11
6 8
7 11 12 4 9 17
3 500000000
1000 1000000000 1000
YES
NO
NO
YES
YES
YES

说明/提示

在第一个和第二个测试用例中,唯一可能的分割方式是将数组分为 [3][3][2][2][1][1]。它们的中位数分别是 332211。这三个中位数的中位数是 med(3,2,1)=2\operatorname{med}(3, 2, 1) = 2。因此,第一个测试用例的答案是 "YES"(因为 222 \le 2),而第二个测试用例的答案是 "NO"(因为 2>12 > 1)。

在第三个测试用例中,可以证明不存在满足条件的分割。

在第四个测试用例中,一个满足条件的分割是 [10,7][10, 7][12,16,3,15][12, 16, 3, 15][6,11][6, 11]。子数组的中位数分别是 77121266。这三个中位数的中位数是 med(7,12,6)=7k\operatorname{med}(7, 12, 6) = 7 \le k,因此该分割满足条件。

在第五个测试用例中,一个满足条件的分割是 [7,11][7, 11][12,4][12, 4][9,17][9, 17]。子数组的中位数分别是 774499。这三个中位数的中位数是 med(7,4,9)=7k\operatorname{med}(7, 4, 9) = 7 \le k,因此该分割满足条件。

在第六个测试用例中,唯一可能的分割方式是将数组分为 [1000][1000][109][10^9][1000][1000]。子数组的中位数分别是 1000100010910^910001000。这三个中位数的中位数是 med(1000,109,1000)=1000k\operatorname{med}(1000, 10^9, 1000) = 1000 \le k,因此该分割满足条件。