用栈模拟竖槽。每放入一枚能级为 x 的晶片,就把它压到栈顶,然后反复检查:若栈中至少有两枚,且栈顶两枚能级相同,则弹出一枚,并把新的栈顶能级加 1(相当于熔合成 x+1)。直到栈顶两枚不同,或栈中不足两枚为止。
题目保证任意时刻至多一处需要熔合,因此不必处理多处同时相等的情况。全部放入后,栈底到栈顶就是剩余晶片从底部到顶部的能级。
每枚晶片最多入栈一次、因熔合出栈一次。
一条竖槽初始为空。接下来依次放入 m 枚晶片,每枚晶片有一个正整数能级。新放入的晶片总是落在当前所有晶片的最上方。
若某次放入后存在两枚相邻且能级相同的晶片 x,它们会立即熔合成一枚能级为 x+1 的新晶片。熔合完成后,若再次出现相邻且能级相同的晶片,则继续熔合,直到无法继续为止。可以证明,任意时刻需要发生熔合的位置至多只有一处。
请输出全部放入并完成熔合后,从底部到顶部剩余晶片的能级。
晶片个数 m 不超过 10^5,每次放入的能级均在 [1,m] 内。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.