有一个栈中有 n 个元素,这 n 个元素就是 1 到 n。现在共有 2n 条指令,有两种指令:
push val
,往栈压入元素 val;pop
,弹出栈顶元素。你想依次从栈中 pop
出 1 到 n,你可以在每一次 push
操作执行完毕后,对栈里的元素进行重新排序(从栈顶到栈底,按从小到大的顺序)。
有一个栈中有n个元素,这n个元素就是1到n。现在共有2∗n条指令,有两种指令:
你想依次从栈中 pop出1~n,你可以在每一次指令一执行完毕后,对栈里的元素进行重新排序(从栈顶到栈底、从小到大排序)。
为了顺利 pop出1~n,最少需要进行多少次重新排序。
保证执行 pop操作的时候,栈非空,且一定存在一组可行解
第一行输入一个整数n(1≤n≤105)代表元素数量。
此后2×n行,每行先输入一个字符串s:
如果s=push,在同一行上输入一个整数val(1≤val≤n)代表一次指令一;
如果s=pop,代表一次指令二。
在一行上输出一个整数,代表最少需要进行的重新排序次数。
输入
3
push 1
pop
push 2
push 3
pop
pop
输出
1
我们要按照顺序拿到1~n。push 1,此时栈顶为1。pop,我们可以拿到1,符合要求。push 2和push 3,栈里面的元素为2,3。3在栈顶。pop,如果直接pop会拿到3,此时我们应该要拿2,所以要进行一次排序操作。排序后元素变成3,2。2在栈顶。此时可以拿到2。pop,此时可以拿到3。进行1次排序就按照顺序拿到了1~n。
输入
5
push 1
push 2
push 3
pop
pop
push 4
push 5
pop
POP
PoP
输出
2
push1,push2,push3后,栈内元素为{1,2,3},栈顶为3。要按照顺序拿到1~n。下一个操作是pop。这时候就需要排序了,排序后变成{3,2,1}栈顶为1。pop,拿到1。pop拿到2。push 4,push 5栈内元素变成{3,4,5}栈顶是5,又进行排序,后变成{5,4,3}栈顶是3。pop拿到3,pop拿到4,pop拿到5。进行2次排序就按照顺序拿到了1~n。