我的间隔格式为(a1, b1), (a2, b2), ...., (an, bn)
。
我愿意支持以下操作
- 添加新间隔。
- 删除现有间隔。
- 给定一个点,找到与该点不重叠的所有区间。
如果我们想找到与点重叠的区间,区间树是最简单的解决方案。当我们想要找到不相交的区间时该怎么办?
最佳答案
同时拥有两棵树中的所有节点。树 A 通过键 ai
保存它们,树 B 通过键 bi
保存它们。
插入和删除显然是O(log n)
。
对于要求3,从最小到最大打印B中的节点,当bi仍然小于该点时停止。相同,但倒退,在 A 中。
示例:
给定 (1,10)、(5,18)、(13,20)
和一个点 12
。
A 中 ai
大于 12
的区间是 (13,20)
,而 B 中的区间是 (13,20)
较小的是(1,10)
。
关于algorithm - 找出所有不与该点重叠的区间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31596248/