CF1413D Shurikens

题目描述

天天经营着一家忍者武器店。今天她打算出售 $n$ 把手里剑,这些手里剑的价格分别为 $1$、$2$、…、$n$ 两(当地货币)。在一天中,天天会将手里剑依次放到展示柜上,开始时展示柜是空的。她的工作非常简单:有时候她会将一把手里剑(从剩余的手里剑中)放到展示柜上,有时候会有忍者进店并从展示柜上买走一把手里剑。由于忍者们都很节俭,他们总是购买展示柜上最便宜的那把手里剑。 天天记录了所有的事件,最终得到了如下类型的事件列表: - + 表示她又往展示柜上放了一把手里剑; - - x 表示价格为 $x$ 的手里剑被买走了。 今天生意很好,所有的手里剑都被买走了。现在天天想知道她的记录是否自洽,以及可能的手里剑上架顺序。请你帮她判断!

输入格式

第一行包含一个整数 $n$($1\leq n\leq 10^5$),表示手里剑的数量。 接下来的 $2n$ 行描述了事件,格式如上所述。保证恰好有 $n$ 个“+”事件,且每个价格 $1$ 到 $n$ 恰好在“- x”事件中出现一次。

输出格式

如果事件列表自洽,输出“YES”。否则(即事件列表矛盾,没有合法的上架顺序),输出“NO”。 如果自洽,第二行输出 $n$ 个用空格分隔的整数,表示手里剑的上架顺序。如果有多种答案,输出任意一种均可。

说明/提示

在第一个样例中,天天首先上架了价格为 $4$ 和 $2$ 的手里剑。之后有顾客进店,买走了价格为 $2$ 的最便宜手里剑。接着,天天又上架了价格为 $3$ 的手里剑,此时展示柜上还有价格为 $4$ 的手里剑。然后又有顾客买走了价格为 $3$ 的手里剑。之后她又上架了价格为 $1$ 的手里剑。最后两位顾客分别买走了价格为 $1$ 和 $4$ 的手里剑。注意,上架顺序 $[2, 4, 3, 1]$ 也是合法的。 在第二个样例中,第一个顾客在还没有任何手里剑上架时就买走了一把手里剑,这是不可能的。 在第三个样例中,天天把所有手里剑都上架后,有顾客买走了价格为 $2$ 的手里剑。这是不可能的,因为价格为 $1$ 的手里剑也在展示柜上,顾客应该买最便宜的那一把。 由 ChatGPT 4.1 翻译