CF821C Okabe and Boxes

题目描述

冈部和超级黑客 Daru 正在堆放和移除盒子。有 $n$ 个盒子,编号从 $1$ 到 $n$。最初,栈里没有盒子。 冈部作为一个控制狂,给了 Daru $2n$ 个指令:其中 $n$ 个是将一个盒子放到栈顶,另外 $n$ 个是将栈顶的盒子移除并扔到垃圾桶里。冈部要求 Daru 必须按照编号从 $1$ 到 $n$ 的顺序依次扔掉盒子。当然,这意味着 Daru 可能无法执行冈部的某些移除指令,因为需要被移除的盒子并不在栈顶。 因此,Daru 可以选择在冈部没注意的时候,在任意时刻将栈中的盒子重新排序为任意顺序。但在重新排序期间,他不能添加或移除盒子。 请你告诉 Daru,为了能够成功完成所有指令,他最少需要将盒子重新排序多少次。保证每个盒子都会在需要移除之前被加入到栈中。

输入格式

输入的第一行包含整数 $n$($1 \leq n \leq 3 \times 10^5$),表示盒子的数量。 接下来的 $2n$ 行,每行以字符串 "add" 或 "remove" 开头。如果该行为 "add",则后跟一个整数 $x$($1 \leq x \leq n$),表示 Daru 需要将编号为 $x$ 的盒子放到栈顶。 保证恰好有 $n$ 行是 "add" 操作,且所有被加入的盒子编号各不相同;有 $n$ 行是 "remove" 操作。还保证每个盒子总是在需要被移除之前就已经被加入到了栈中。

输出格式

输出一个整数,表示 Daru 至少需要将盒子重新排序多少次,才能成功完成所有冈部的指令。

说明/提示

在第一个样例中,Daru 应该在加入盒子 $3$ 后进行一次重新排序。 在第二个样例中,Daru 应该在加入盒子 $4$ 和盒子 $7$ 后进行重新排序。 由 ChatGPT 5 翻译