洗盘子

题目描述

小 A 在餐厅洗盘子。初始时,有 nn 个盘子堆叠在一起,从上到下依次编号为 1,2,,n1, 2, \dots, n

小 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 的洗盘子方法产生的。

输入格式

第一行输入一个整数 TT,表示测试数据的组数。

对于每组测试数据:

  • 第一行输入一个整数 nn,表示盘子的总数。
  • 第二行输入 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n,表示一个给定的清洗顺序。

输出格式

对于每组测试数据,输出一行。如果给定的顺序是可能由小 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 必须紧跟着 43。而输入序列 [1, 2, 5, 3, 4]34 的顺序是错误的。

数据范围与约定

  • 1T1001 \le T \le 100
  • 1n1051 \le n \le 10^5
  • a1,,ana_1, \dots, a_n11nn 的一个排列。
  • 所有测试数据的 nn 之和不超过 2×1052 \times 10^5

相关

在下列比赛中:

「果壳杯」 ROUND 39 (Div. 4)