P6198 [EER1] 单调栈
题目描述
单调栈是一种常见的数据结构,如果你之前没有了解过,可以参考 [单调栈教程](https://www.luogu.com.cn/problemnew/solution/P5788) 帮助理解题意。
有一个长度为 $n$ 的**排列** $p_0, p_1, \cdots, p_{n-1}$,通过这个排列生成了一个长度为 $n$ 的序列 $S$,其中 $S_i$ 表示由 $p_0, p_1, \cdots, p_i$ 组成的递增单调栈的大小。
换一种说法,序列 $S$ 是由如下代码生成的:
```cpp
stack stk;
int n = p.size();
vector S;
for (int i = 0; i < n; i++) {
while (!stk.empty() && p[i]
输入格式
无
输出格式
无
说明/提示
样例 #1 解释:样例 $1$ 的输出对应的 $S$ 序列为 1 2 2 3 4 3 1 2 2 3,可以匹配输入。可以证明这是字典序最小的可以匹配输入的排列。
对于 $100\%$ 的数据,满足 $1 \leq n \leq 10^6$。
本题共有 $5$ 个子任务,每个子任务的限制如下:
子任务 $1$ ($5$ 分):保证 $1 \leq n \leq 10$。
子任务 $2$ ($10$ 分):保证给出的 $S$ 中没有 $-1$。
子任务 $3$ ($20$ 分):保证 $1 \leq n \leq 300$。
子任务 $4$ ($20$ 分):保证 $1 \leq n \leq 3000$。
子任务 $5$ ($45$ 分):无特殊限制。