CF1340A Nastya and Strange Generator

题目描述

Denis 在被 Nastya 拒绝后非常伤心,于是他决定去门洞里散步找点乐子。幸运之神眷顾了他!当他走进第一个院子时,遇到了一位正在卖东西的奇怪男子。 Denis 买了一个神秘物品,结果竟然是……随机排列生成器!Denis 简直不敢相信自己的好运。 回到家后,他开始研究这个生成器的工作原理,并了解了其算法。生成一个排列的过程包含 $n$ 步。在第 $i$ 步时,会为数字 $i$($1 \leq i \leq n$)选择一个位置。数字 $i$ 的位置选择规则如下: - 对于所有 $j$ 从 $1$ 到 $n$,我们计算 $r_j$ —— 这是满足 $j \leq r_j \leq n$ 且排列中位置 $r_j$ 尚未被占用的最小下标。如果不存在这样的 $r_j$,则认为 $r_j$ 未定义。 - 对于所有 $t$ 从 $1$ 到 $n$,我们计算 $count_t$ —— 表示有多少个 $1 \leq j \leq n$ 满足 $r_j$ 已定义且 $r_j = t$。 - 在排列中尚未被占用的位置中,找出 $count$ 数组值最大的那些位置。 - 生成器会在这些位置中任选一个,将数字 $i$ 放入。生成器可以任选其中任意一个位置。 让我们通过下面的例子来看看算法的运行过程: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1340A/b046e416b9d8c9ca15a404e7bc85fa278badc8c3.png) 设 $n = 5$,且算法已经将数字 $1, 2, 3$ 安排进了排列。考虑生成器如何为数字 $4$ 选择位置: - $r$ 的值为 $r = [3, 3, 3, 4, \times]$,其中 $\times$ 表示未定义。 - $count$ 的值为 $count = [0, 0, 3, 1, 0]$。 - 排列中仅剩两个未被占用的位置:$3$ 和 $4$。在 $count$ 数组中,位置 $3$ 的值为 $3$,位置 $4$ 的值为 $1$。 - 最大值只在位置 $3$ 处取得,因此算法会唯一地选择位置 $3$ 来放置数字 $4$。 Denis 对自己的购买非常满意,回家后连续几天不停地生成排列。他相信自己也能想出不逊于生成器的随机排列。于是,他随手写下了第一个想到的排列 $p_1, p_2, \ldots, p_n$,并想知道这个排列是否有可能通过上述生成器生成。 不幸的是,这个问题对他来说太难了,于是他向你求助。你需要判断,给定的排列是否可能通过描述的算法生成(假设生成器每次都能选择 Denis 需要的位置)。

输入格式

第一行包含一个整数 $t$($1 \leq t \leq 10^5$),表示测试用例的数量。接下来是每个测试用例的描述。 每个测试用例的第一行包含一个整数 $n$($1 \leq n \leq 10^5$),表示排列的大小。 每个测试用例的第二行包含 $n$ 个不同的整数 $p_1, p_2, \ldots, p_n$($1 \leq p_i \leq n$),表示 Denis 写下的排列。 保证所有测试用例中 $n$ 的总和不超过 $10^5$。

输出格式

如果该排列可能是生成器生成的结果,输出 "Yes";否则输出 "No"。 字母大小写不限。

说明/提示

让我们模拟一下生成器在第一个测试用例中的操作。 第 $1$ 步,$r = [1, 2, 3, 4, 5], count = [1, 1, 1, 1, 1]$。最大值在所有空位都能取得,因此生成器可以任选 $1$ 到 $5$ 号位置。在例子中,选择了 $5$。 第 $2$ 步,$r = [1, 2, 3, 4, \times], count = [1, 1, 1, 1, 0]$。最大值在 $1$ 到 $4$ 号位置都能取得,生成器可以任选其一。在例子中,选择了 $1$。 第 $3$ 步,$r = [2, 2, 3, 4, \times], count = [0, 2, 1, 1, 0]$。最大值为 $2$,只在位置 $2$ 取得,因此生成器会选择位置 $2$。 第 $4$ 步,$r = [3, 3, 3, 4, \times], count = [0, 0, 3, 1, 0]$。最大值为 $3$,只在位置 $3$ 取得,因此生成器会选择位置 $3$。 第 $5$ 步,$r = [4, 4, 4, 4, \times], count = [0, 0, 0, 4, 0]$。最大值为 $4$,只在位置 $4$ 取得,因此生成器会选择位置 $4$。 最终得到的排列为 $2, 3, 4, 5, 1$,即生成器可以生成该排列。 由 ChatGPT 4.1 翻译