【题解】ABC212D Querying Multiset
题意
毛毛正在家里玩球。现在他有很多什么都没写的空白球与一个包,一开始,包是空的,毛毛会完成\(Q(Q\le 2·10^5)\)个操作,每一次操作都是下列三个操作中的其中一个:
-
操作1 输入\(x\),在空白球上写个整数\(x\)然后放入包内
-
操作2 输入\(y\),对于包中的每个球,把所有球内的原有值分别加上\(y\)
-
操作3 在包中找出值最小的球(如果有多个最小值,只选择其中一个)输出这个值,然后扔掉这个球
题解
之前不会平衡树,听别人说可以用平衡树过。
现在会了板子,但是还是不会。。。
有大佬会吗,浇浇\(qwq\)。
感觉可以算一个trick
将前\(i\)个数加上\(y\),然后将\(x\)加入,相当于将\(x\)减去\(y\),然后加入。
那么设前\(i\)个数总共加了\(sum\),则加入\(x\)的时候加入的实际是\(x-sum\)
那么输出的时候答案加上\(delta\)即可。
直接用堆做就行了,复杂度当然是\(O(n\ log\ n)\)