洗盘子
题目描述
小 A 在餐厅洗盘子。初始时,有 个盘子堆叠在一起,从上到下依次编号为 。
小 A 的洗盘子流程由若干步组成。在每一步中,他会从当前盘子堆的最上面拿起连续的若干个盘子,然后立即按照与拿起时相反的顺序(即从刚拿起的盘子中最下面的那个开始)清洗它们。这个过程会一直重复,直到所有盘子都被清洗完毕。
例如,如果初始有 5 个盘子,堆叠为 [1, 2, 3, 4, 5](1 在最上面)。
- 第一步: 小 A 拿起最上面的 2 个盘子(盘子 1 和 2)。他会按照
2, 1的顺序清洗它们。 - 此时,盘子堆剩下
[3, 4, 5](3 在最上面)。 - 第二步: 小 A 拿起剩下的所有 3 个盘子(盘子 3, 4, 5)。他会按照
5, 4, 3的顺序清洗它们。 - 最终,完整的清洗顺序就是
2, 1, 5, 4, 3。
现在,给定一个完整的盘子清洗顺序,请你判断这个顺序是否可能是由小 A 的洗盘子方法产生的。
输入格式
第一行输入一个整数 ,表示测试数据的组数。
对于每组测试数据:
- 第一行输入一个整数 ,表示盘子的总数。
- 第二行输入 个整数 ,表示一个给定的清洗顺序。
输出格式
对于每组测试数据,输出一行。如果给定的顺序是可能由小 A 产生的,则输出 yes,否则输出 no。
样例
样例输入
2
5
1 2 5 4 3
5
1 2 5 3 4
样例输出
yes
no
提示
样例说明
-
对于第一组数据,序列
[1, 2, 5, 4, 3]是一个合法的顺序。- 初始盘子堆:
[1, 2, 3, 4, 5] - 步骤 1: 拿起最上面的 1 个盘子
[1]。按相反顺序清洗,得到清洗序列[1]。剩下盘子堆[2, 3, 4, 5]。 - 步骤 2: 拿起最上面的 1 个盘子
[2]。按相反顺序清洗,得到清洗序列[1, 2]。剩下盘子堆[3, 4, 5]。 - 步骤 3: 拿起剩下的 3 个盘子
[3, 4, 5]。按相反顺序清洗,得到[5, 4, 3]。拼接到之前的序列后,总序列为[1, 2, 5, 4, 3]。 - 该方案与输入匹配,因此输出
yes。
- 初始盘子堆:
-
对于第二组数据,序列
[1, 2, 5, 3, 4]不合法。- 前两个清洗的盘子是
1, 2,这意味着小 A 必须先洗了[1],再洗了[2]。 - 此时,剩下的盘子堆是
[3, 4, 5]。无论他接下来拿几个盘子(1个、2个或3个),清洗的顺序都必然是递减的。例如,如果他拿起[3, 4, 5],清洗顺序是5, 4, 3。 - 因此,在
1, 2之后,接下来出现的5必须紧跟着4和3。而输入序列[1, 2, 5, 3, 4]中3和4的顺序是错误的。
- 前两个清洗的盘子是
数据范围与约定
- 是 到 的一个排列。
- 所有测试数据的 之和不超过 。
相关
在下列比赛中:
京公网安备11010802045784号