我试图解决以下算法问题:
让我们说我们有一个数据结构,允许我们插入元素并删除和写入最小元素。并且假设我们知道一系列n
命令,所有这些命令都是I(k)
(插入k)或D
(删除最小值并输出它)。
我们的任务是为每个D
命令决定它将返回哪个号码。例如,对于序列:
I(2) D I(5) I(4) I(3) D D I(1) D D
结果应该是
2 3 4 1 5
目标(或提示)是使用Find-Union数据结构实现优于O(nlog(n))
复杂度,这允许我们在{{1}中执行n
生成集,查找和联合其中O(na(n))
是逆Ackermann函数。
这不是家庭作业 - 我准备参加考试,并且已经有超过两个小时的练习困难了。
我将不胜感激任何进一步的提示
编辑:我忘记添加一个重要的假设。我们插入的所有数字都来自范围1..n
进一步修改:事实证明,我不是第一个遇到这个问题的人;它被称为离线最小问题,任何有兴趣的人都可以进一步阅读here