鉴于300000个细分市场。
考虑任何一对细分:a = [l1,r1]
和b = [l2,r2]
。
如果l2 >= l1
和r2 <= r1
,则为“好”对。
如果a == b
,那就是“坏”对。
过度,这是“坏”对。
如何使用分段树和扫描线找到给定段中所有“好”对的数量?
答案 0 :(得分:0)
对于它们的l值,按照递增顺序对片段进行排序,对于具有相同l值的对,按照它们的r值按递减顺序对它们进行排序。
假设某个特定的,您想要计算好的对(ai,aj)的数量,使得j <1。一世。设ai = [l1,r1]和aj = [l2,r2]。然后我们得到l2 <= l1。现在我们需要计算j的所有可能值,使得r2 <= r1。这可以通过为所有j维持r的值的分段树来完成,使得0 <0。 j&lt;一世。查询第i对后,使用第i个段的r值更新段树。
来分割树部分,在r的值上构建一个分段树。在更新段树中r的值时,在段树中将r加1,并查询r的特定值,查询[0,r-1]范围内的和。这将给出与给定段一致的段的总数。
如果r的值很大而不适合分段树,则先将坐标压缩应用于值,然后使用分段树作为压缩值。