小苯的双端队列
题号:NC317228
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小苯面前有一个双端队列 \texttt{deque},其中按从左到右的顺序依次存放着:
            1,2,3,\dots,n
\hspace{15pt}接下来,小苯会进行恰好 n 次操作。每次操作中,他只能执行下面两种操作之一:
\hspace{23pt}\bullet 从队首取出一个数;
\hspace{23pt}\bullet 从队尾取出一个数。
\hspace{15pt}所有取出的数按操作顺序依次组成一个长度为 n 的序列。

\hspace{15pt}现在给定一个长度为 n 的数组 a_1,a_2,\dots,a_n
\hspace{15pt}你的任务就是判断:是否存在一种合法的出队方式,使得最终得到的出队序列恰好等于数组 a

输入描述:

\hspace{15pt}每个测试文件包含多组测试数据。第一行输入一个整数 T\ (1 \leqq T \leqq 10^4) 代表数据组数,每组测试数据描述如下:

\hspace{23pt}\bullet 第一行输入一个整数 n1 \leqq n \leqq 2 \times 10^5)。
\hspace{23pt}\bullet 第二行输入 n 个整数 a_1,a_2,\dots,a_n1 \leqq a_i \leqq n)。(保证输入是一个排列)

\hspace{15pt}保证所有测试数据中,n 的总和不超过 2 \times 10^5

输出描述:

\hspace{15pt}对于每组测试数据:
\hspace{23pt}\bullet 如果存在合法的出队方式,输出 "YES";
\hspace{23pt}\bullet 否则输出 "NO"。
示例1

输入

复制
4
5
1 5 2 4 3
5
2 1 5 4 3
4
1 2 3 4
4
4 3 2 1

输出

复制
YES
NO
YES
YES

说明

\hspace{15pt}第一组数据中,一种合法操作顺序是:
\hspace{15pt}先从队首取出 1,再从队尾取出 5,再从队首取出 2,再从队尾取出 4,最后取出 3
\hspace{15pt}第二组数据中,初始时队首是 1,队尾是 5,因此第一步不可能取出 2,所以答案为 "NO"。
\hspace{15pt}第三组数据中,每次都从队首取出即可。
\hspace{15pt}第四组数据中,每次都从队尾取出即可。