小苯的区间操作
题号:NC317167
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小苯有一个长度为 n 的非负整数序列 a_1,a_2,\dots,a_n
\hspace{15pt}他可以进行任意次如下操作:
\hspace{23pt}\bullet 选择一个满足 R-L+1 \geqq 2 的连续区间 [L,R]
\hspace{23pt}\bullet 满足 a_L=a_R
\hspace{23pt}\bullet 对于所有满足 L < i < R 的位置 i,都有 a_i \geqq a_L
\hspace{23pt}\bullet 将区间 [L,R] 内的所有数都减去 1

\hspace{15pt}需要保证所有操作过程中,序列中的数都不能变成负数。
\hspace{15pt}你的任务就是判断,是否能够通过任意次这样的操作,把整个序列变成全 0

输入描述:

\hspace{15pt}每个测试文件包含多组测试数据。第一行输入一个整数 T\ (1 \leqq T \leqq 10^4) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}第一行输入一个整数 n\ (1 \leqq n \leqq 2 \times 10^5),表示序列长度。
\hspace{15pt}第二行输入 n 个非负整数 a_1,a_2,\dots,a_n\ (0 \leqq a_i \leqq 10^9)
\hspace{15pt}保证所有测试数据中 n 的总和不超过 2 \times 10^5

输出描述:

\hspace{15pt}对于每组测试数据,若可以把整个序列变成全 0,输出一行 \rm Yes
\hspace{15pt}否则输出一行 \rm No
示例1

输入

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

输出

复制
Yes
No
Yes
No

说明

\hspace{15pt}对于第一组数据,可以直接选择区间 [1,2],操作一次后变成 [0,0]

\hspace{15pt}对于第二组数据,虽然一开始可以选择区间 [1,3],操作后变成 [0,1,0],但之后已经无法继续操作,所以答案为 No。

\hspace{15pt}对于第三组数据,可以先对区间 [3,4] 操作一次,序列变成 [1,1,1,1];再对区间 [1,4] 操作一次,即可把整个序列变成全 0

\hspace{15pt}对于第四组数据,任意一次合法操作都不能跨过中间的 0,因此无法把所有正数都消掉。