CF1741E Sending a Sequence Over the Network

题目描述

序列 $a$ 通过网络传输的方式如下: 1. 将序列 $a$ 拆分为若干段(每个元素恰好属于一个段,每个段是一组连续的元素); 2. 对于每一段,将其长度写在该段的左侧或右侧; 3. 得到的序列 $b$ 被发送到网络上。 例如,需要发送序列 $a = [1, 2, 3, 1, 2, 3]$。假设其被分段如下:$[\color{red}{1}] + [\color{blue}{2, 3, 1}] + [\color{green}{2, 3}]$。那么可能得到如下序列: - $b = [1, \color{red}{1}, 3, \color{blue}{2, 3, 1}, \color{green}{2, 3}, 2]$, - $b = [\color{red}{1}, 1, 3, \color{blue}{2, 3, 1}, 2, \color{green}{2, 3}]$, - $b = [\color{red}{1}, 1, \color{blue}{2, 3, 1}, 3, 2, \color{green}{2, 3}]$, - $b = [\color{red}{1}, 1, \color{blue}{2, 3, 1}, 3, \color{green}{2, 3}, 2]$。 如果采用不同的分段方式,发送的序列可能不同。 现在给定序列 $b$,请判断该序列 $b$ 是否可能是通过上述方式从某个序列 $a$ 发送得到的。换句话说,是否存在某个序列 $a$,使得将 $a$ 按上述规则处理后可以得到序列 $b$?

输入格式

输入的第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。 每个测试用例包含两行。 测试用例的第一行包含一个整数 $n$($1 \le n \le 2 \cdot 10^5$),表示序列 $b$ 的长度。 测试用例的第二行包含 $n$ 个整数 $b_1, b_2, \dots, b_n$($1 \le b_i \le 10^9$),表示序列 $b$ 本身。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,输出一行: - 如果序列 $b$ 可能是通过网络发送得到的,输出 YES; - 否则输出 NO。 你可以用任意大小写输出 YES 和 NO(例如 yEs、yes、Yes 和 YES 都会被识别为肯定回答)。

说明/提示

在第一个样例中,序列 $b$ 可以由序列 $a = [1, 2, 3, 1, 2, 3]$ 经过如下分段得到:$[\color{red}{1}] + [\color{blue}{2, 3, 1}] + [\color{green}{2, 3}]$。序列 $b$ 为 $[\color{red}{1}, 1, \color{blue}{2, 3, 1}, 3, 2, \color{green}{2, 3}]$。 在第二个样例中,序列 $b$ 可以由序列 $a = [12, 7, 5]$ 经过如下分段得到:$[\color{red}{12}] + [\color{green}{7, 5}]$。序列 $b$ 为 $[\color{red}{12}, 1, 2, \color{green}{7, 5}]$。 在第三个样例中,序列 $b$ 可以由序列 $a = [7, 8, 9, 10, 3]$ 经过如下分段得到:$[\color{red}{7, 8, 9, 10, 3}]$。序列 $b$ 为 $[5, \color{red}{7, 8, 9, 10, 3}]$。 在第四个样例中,不存在任何序列 $a$,使得通过上述方式处理后可以得到序列 $b$。 由 ChatGPT 4.1 翻译