分享一个顶级数据结构
2026-01-12 21:49:29
发布于:广东
在做 https://www.luogu.com.cn/problem/P3250 的时候发现的。
请你设计一个数据结构,使它能以 的空间和均摊小常数 在线完成以下操作:
- 添加一个数 。
- 删除一个数 ,保证它存在。
- 查询最大值。
首先肯定想到的是平衡树,但是常数太大了;用权值树状数组的话,空间是 的,开不下。
事实上,我们可以用两个大根堆来实现!
- 插入:向第一个大根堆内加入这个元素即可。
- 删除:运用 lazy-delete 的思想,先在第二个堆内加入这个元素,然后重复循环,如果两个堆顶相等的话,就删除两个堆的元素。显然这样可以得到最大值;由于一次操作只能添加一个元素,所以不论怎么删,总体都是均摊 的。
由于堆的常数接近 ,所以这种做法远优于平衡树!
全部评论 8
列表怎么样:
a=[1,2,3] a.append(4) print(a) a.remove(1) print(a) print(max(a))1周前 来自 浙江
0列表不能
1周前 来自 广东
0
离散化不行吗(雾)存储一个真实位置和一个ds内位置
1周前 来自 广东
0?
1周前 来自 广东
0实现很困难吧感觉,而且咋感觉做不到单
1周前 来自 广东
0
为何当初搜整体二分和数链剖分都没搜到这题
1周前 来自 广东
0吓哭了居然是紫,题解里还有整体二分
1周前 来自 广东
0这题最优解应该是整体二分,但我不会(
1周前 来自 广东
0有时间了在学
1周前 来自 广东
0ACGO评测姬和洛谷评测姬疑似整体二分星努,能把整体二分跑得比相同复杂度甚至更优复杂度的代码还快(为什么其他人用我的代码提交能比我快20多毫秒),主席树和树套树是片里无能的丈夫实锤
1周前 来自 广东
0
这不是一眼堆吗,斐波那契堆用同样的删除法删除任意元素是不是能做到第一个和第三个均摊O(1)
1周前 来自 广东
0woc
学过0个数据结构导致的
1周前 来自 广东
0
似乎之前在哪个平衡树题目的题解里看见过这种做法
2026-01-13 来自 浙江
0ddd
2026-01-13 来自 上海
0d
2026-01-13 来自 广东
0



































有帮助,赞一个