首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用线段树和扫描线

如何使用线段树和扫描线
EN

Stack Overflow用户
提问于 2015-12-12 22:00:00
回答 1查看 247关注 0票数 0

给定300000个片段。考虑任意一对网段:a = [l1,r1]b = [l2,r2]。如果是l2 >= l1r2 <= r1,则是“好”的一对。如果为a == b,则为“坏”对。总而言之,它是“坏”的一对。

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

EN

回答 1

Stack Overflow用户

发布于 2015-12-15 01:06:20

根据其l值以递增顺序对线段进行排序,对于具有相同l值的对,以相对于其r值的降序顺序对它们进行排序。

假设对于特定的情况,你想计算好的配对(ai,aj)的数量,使得j< i。让ai=l1,r1和aj = l2,r2。然后我们有l2 <= l1。现在我们需要计算j的所有可能值,使得r2,<=,r1。这可以通过为所有j的r的值维护分段树来完成,使得0

进入分段树部分,根据r的值构建分段树。在更新分段树中的r值时,将分段树中的r的值加1,并查询r的特定值,查询范围为0,r-1的sum。这将给出适合给定分段的分段总数。

如果r的值太大,无法放入段树中,则首先对值应用坐标压缩,然后使用段树作为压缩值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34240668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档