#HCOIJ202302T1. 出栈序列

出栈序列

题目描述

栈是一种“先进后出”的数据结构,对于一个序列1 2 ... n,其入栈顺序是1 2 ...n,但每个元素出栈的时机可以自由选择。

例如1入栈、1出栈,2入栈、3入栈、3出栈、2出栈,于是出栈序列为 1 3 2。

对于入栈顺序1 2 ... n,出栈序列有很多个,但出栈序列的总数不是1 2 ... n的全排列数,因为有些排列不满足出入栈规则。

例如3 1 2就不是一个合法的出栈序列,因为3先出栈意味着此时1和2在栈里面,入栈顺序是1 2,于是出栈必须是2 1。

小明仔细研究了出入栈的规则,它发现凡是不合法的出栈序列都有一个规律,至少有一个数,后面比它小的数,存在递增的情况。

现在请你帮助小明编写程序,对于给定的出栈序列,判断是否合法。

输入输出格式

输入格式:

  • 第一行t,表示t组数据
  • 对每组数据
    • 第一行n,表示序列长度
    • 第二行1..n的一个排列,表示要判断的出栈序列

输出格式:

  • t行,每行Yes或No,表示出栈序列是否合法

输入输出样例

输入样例1:

2
3
1 2 3
3
3 1 2

输出样例1:

Yes
No

测试点

一共10个测试点,每个测试点10分

每个测试点时间限制为1s,空间限制为128Mb

数据范围:

  • 所有数据:t<=5t<=5
  • 样例1-3:n<=100n<=100
  • 样例4-5:n<=2000n<=2000
  • 样例6-10:n<=105n<=10^5