数据结构学习笔记——可删堆

声明:以下堆全都是小根堆
一般的堆只支持删除堆顶(也就是最小值),可删堆支持删除任意一个数(必须存在)。
可删堆的维护用了两个普通堆 \(h1, h2\)\(h1\) 就是原堆,\(h2\) 就是删除堆。在 \(h1\) 且不在 \(h2\) 的元素仍然存在,在 \(h1\) 且在 \(h2\) 的元素已经被删除。
那么维护操作就很简单了。

\(insert x\) 操作就是把 \(x\) 扔进 \(h1\)
\(erase x\) 操作就是把 \(x\) 扔进 \(h2\)
\(top\) 操作:如果 \(h1.top() = h2.top()\),说明栈顶已经被删掉了,这时候把这个元素从两个栈顶都 \(pop\) 出去,一直重复执行直到两个栈顶不一样,这时候 \(h1.top()\) 就是真的最小值啦!

posted @ 2025-07-25 18:46  BeBanned  阅读(68)  评论(0)    收藏  举报