NOI2004郁闷的出纳员
题目看起来玄乎,但其实只需要一点点小 $trick$ 就可以了.
我们可以用一个全局的 $delta$ 来维护工资的调整记录
对于每一个新加入的员工,先判断是否低于最低工资下限,如果是,直接踢出,不做任何操作,否则,将其插入 $Treap$ 中,不过这时为了不对以后的查询产生影响,我们要插入的值时 $key-delta$ (想一想,为什么?)
对于加工资的操作,直接在 $delta$ 上统计即可.而减工资,这可能牵扯到会有员工离开,所以我们不能只修改$delta$
我们在修改 $delta$ 之后,把 $Treap$ 按权值分割,分割标准是 $minn-delta-1$ (想一想,为什么?提示:不等式移项)
然后直接舍弃整个的左子树,此时的左子树就是所有会离开公司的员工代表的节点,所以最后的答案要加上该子树的 $size$
对于查询操作,直接查询出来的第 $k$ 小(注意!!!是第 $k$ 小)加上 $delta$ 即可
$Code$:
1 |
|