【题解】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)\)

posted @ 2021-11-10 22:13  hzy1  阅读(86)  评论(0编辑  收藏  举报