题意:
给你一个数组a长度为n,有三种操作:
- 0 x y t:
- 1 x y:求
- 2 x,y:求
刚刚结束的字节跳动camp出了一道取最小值的差不多的题,当时不会,现在来补一下。
- 对于一棵线段树我们存一下每个节点管辖区域的最大值mx,次大值se还有最大值的数量cnt。
- 每次更新的时候,会有三种情况
,管辖区域内全部值不会受本次更新影响;
,管辖区域内只有mx值受到本次更新影响,我们只要把mx更新到t,sum减去mx和t的差值乘上cnt即可;
,管辖区域内有若干个值受到本次更新影响,那么我们直接暴力递归更新;
- 重复以上操作。
- 然后操作1和操作2,就是一颗线段树的普通用法了。
接下来,口胡证明一下为什么对于情况三我们暴力更新的时间复杂度是正确