在线间隔联合的长度

时间:2014-12-08 16:35:06

标签: c++ algorithm data-structures binary-tree segment-tree

我需要一个存储一组间隔的数据结构,并允许计算它们的并集长度。

假设一行中有一组间隔,整数末尾位于1n之间。最初它是空的,可以添加或删除它的间隔。在每次操作之后,应该计算集合中所有区间的并集长度。

如何通过具有O(log n)时间复杂度的段树实现推送,删除和查找长度?应该在节点中存储什么?

1 个答案:

答案 0 :(得分:0)

此处存储每个节点中具有最小值的元素的最小值和数量就足够了。添加间隔相当于将1添加到范围,删除间隔相当于将-1添加到范围。联盟的长度是:
1. n如果树的根的最小值不为零 2. n - c,其中c是树的根最小值的元素数,如果最小值为零。
最小值不能为负数(任何点总是被0或更多间隔覆盖)。

相关问题