CF1455D Sequence and Swaps
题目描述
给定一个由 $n$ 个整数 $a_1, a_2, \dots, a_n$ 组成的序列 $a$,以及一个整数 $x$。你的任务是通过若干次操作使序列 $a$ 变为非递减序列(即满足 $a_1 \le a_2 \le a_3 \le \dots \le a_n$)。
你可以进行如下操作任意次(也可以不进行):选择一个整数 $i$,满足 $1 \le i \le n$ 且 $a_i > x$,然后交换 $a_i$ 和 $x$ 的值。
例如,若 $a = [0, 2, 3, 5, 4]$,$x = 1$,可以进行如下操作:
1. 选择 $i = 2$(因为 $a_2 > x$),操作后 $a = [0, 1, 3, 5, 4]$,$x = 2$;
2. 选择 $i = 3$(因为 $a_3 > x$),操作后 $a = [0, 1, 2, 5, 4]$,$x = 3$;
3. 选择 $i = 4$(因为 $a_4 > x$),操作后 $a = [0, 1, 2, 3, 4]$,$x = 5$。
请计算最少需要多少次操作才能使 $a$ 变为非递减序列,如果无法做到,输出 $-1$。
输入格式
第一行包含一个整数 $t$($1 \le t \le 500$),表示测试用例的数量。
每个测试用例包含两行。第一行包含两个整数 $n$ 和 $x$($1 \le n \le 500$,$0 \le x \le 500$),分别表示序列的长度和初始的 $x$ 值。
第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($0 \le a_i \le 500$)。
所有测试用例中 $n$ 的总和不超过 $500$。
输出格式
对于每个测试用例,输出一个整数,表示使 $a$ 变为非递减序列所需的最小操作次数。如果无法做到,输出 $-1$。
说明/提示
由 ChatGPT 4.1 翻译