数据结构学习笔记——可删堆
声明:以下堆全都是小根堆
一般的堆只支持删除堆顶(也就是最小值),可删堆支持删除任意一个数(必须存在)。
可删堆的维护用了两个普通堆 \(h1, h2\),\(h1\) 就是原堆,\(h2\) 就是删除堆。在 \(h1\) 且不在 \(h2\) 的元素仍然存在,在 \(h1\) 且在 \(h2\) 的元素已经被删除。
那么维护操作就很简单了。
\(insert x\) 操作就是把 \(x\) 扔进 \(h1\) 里
\(erase x\) 操作就是把 \(x\) 扔进 \(h2\) 里
\(top\) 操作:如果 \(h1.top() = h2.top()\),说明栈顶已经被删掉了,这时候把这个元素从两个栈顶都 \(pop\) 出去,一直重复执行直到两个栈顶不一样,这时候 \(h1.top()\) 就是真的最小值啦!

浙公网安备 33010602011771号