题解:AT_arc202_a [ARC202A] Merge and Increment

· · 题解

显然的贪心是,先处理出来值相同的连续段,然后按照值域从小到大处理。对于一个连续段,把他的长度变成除以二向上取整,答案变量加上它模二(也就是,如果原来长度是奇数就需要一个插入一个数垫一下)。

然后维护这个事情可以用一个堆和链表维护。链表干的事情是,合并值相同的连续段。堆干的事情是取出值最小的连续段。

然后每次连续段的长度是会减半的,所以每种最多操作 O(\log V) 次。特殊地,连续段长度为 1O(1) 特判合并。

最终的复杂度是 O(n\log n\log V)