首先数组中的元素不能有重复的,否则不可能达到严格递增或严格递减。
我们可以任意重排没有被选择的元素,所以被选中的个元素一定是严格递增或严格递减, 且没有其他数据满足
(即其余元素中没有元素在被选择的元素的最大值和最小值之间)
我们可以对离散化处理,这样满足要求的元素一定是连续的(
)
from bisect import bisect_left
def check1(a, m):
n = len(a)
mm = -1 # 严格递增且连续的子数组的最大长度
l = 0
for r in range(1, n):
if a[r] != a[r-1] + 1:
mm = max(r-l, mm)
l = r
mm = max(n-l, mm)
return mm >= m
def check2(a, m):
n = len(a)
mm = -1 # 严格递减且连续的子数组的最大长度
l = 0
for r in range(1, n):
if a[r] != a[r-1] - 1:
mm = max(r-l, mm)
l = r
mm = max(n-l, mm)
return mm >= m
t = int(input())
for _ in range(t):
n, m = map(int, input().split())
a = list(map(int, input().split()))
if len(set(a)) != n: # 有重复元素
print('NO')
continue
if n == 1 or m == 1: # 没有重复元素的情况下,若只有一个元素或者m为1,则一定能满足
print('YES')
continue
#对a离散化处理
na = a[:]
na.sort()
for i in range(n):
a[i] = bisect_left(na, a[i])
if check1(a, m) or check2(a, m):
print("YES")
else:
print("NO")