【问题标题】:How to use segment tree and scanline如何使用线段树和扫描线
【发布时间】:2015-12-12 14:00:00
【问题描述】:

给定 300000 段。 考虑任何一对段:a = [l1,r1]b = [l2,r2]。 如果 l2 >= l1r2 <= r1 是“好”对。 如果a == b,则为“坏”对。 总的来说,这是“坏”的一对。

如何使用段树和扫描线查找给定段中所有“好”对的数量?

【问题讨论】:

    标签: segment-tree scanline


    【解决方案1】:

    按照 l 值的升序对段进行排序,对于具有相同 l 值的对,按照 r 值的降序对它们进行排序。

    假设对于一个特定的,你想计算好的对 (ai,aj) 的数量,使得 j

    来到分段树部分,在 r 的值上构建分段树。在更新段树中的 r 值时,将 1 加到段树中的 r 值上,并且要查询 r 的特定值,请查询 [0,r-1] 范围内的总和。这将给出适合给定细分的细分总数。

    如果 r 的值很大,不适合线段树,则先对值应用坐标压缩,然后对压缩值使用线段树。

    【讨论】:

      猜你喜欢
      • 2019-04-27
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      相关资源
      最近更新 更多