我正在寻找一种数据结构,该结构将维护大小为n的整数表,并允许在时间O (log n )中进行以下操作。
- ,这增加了吨[ 一个] ,吨[ 一个+ 1 ] ,... ,吨[ b ]。
- ,从而减少 t [ a ] ,t [ a + 1 ] ,… ,t [ b ]。
- ,它返回索引 i的数量,以使 t [ i ] ≠ 0。
您可以保证,使用相同的参数,可以将每次减少请求与上一次增加请求进行匹配。我想到的应用程序是一种扫掠线算法,可以在时间O (n log n )中计算n个给定直线矩形的并集面积。
四叉树的大小为,所以这不是解决方案。Fenwick或Interval树具有适当的风格,但我看不出如何扩展它们以支持上述操作。
Fenwick树不会使用“可以使用相同的参数a,b将每个减少请求与先前的增加请求进行匹配”的承诺,因此使用该承诺可能会有一个更简单的解决方案(但现在我不知道了)。
—
杰里米
由于您可以拥有的输入数量最多为(您可以检测到重复并且可以不插入到数据结构中),因此,使用通用的度量树数据结构,我们仍然可以获得O (log n )性能。参见cosy.sbg.ac.at/~ksafdar/data/courses/SeminarADS/…幻灯片47-52。
—
徐超
杰里米(Jérémie)和朝旭(Chao Xu)。感谢您的评论。我现在了解如何使用“间隔树”来维护一组不断变化的间隔的并集的总长度。实际上,这是一个非常可爱的数据结构。
—
ChristophDürr2013年
对于一般数据结构的问题,在搜索时,需要空间ø (p )⊂ Ô (Ñ 2)其中,p是有源对坐标的列表的大小。但确实是扫掠迹线算法p ∈ Ø (ñ )这样的空间保持在线。当p大于O (p )时,对于空间更好的数据结构,问题仍然存在。。
—
杰里米
这是一个很好的链接,您可以在其中测试针对相同问题的其他解决方案的实现:spoj.com/OI/problems/NKMARS
—
Segal-Halevi