线段树的应用【信息技术】.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
线段树的应用 广西柳铁一中 林涛 【摘要】 在竞赛解题中,常遇到与区间有关的操作,比如统计若干矩形并的面积,记录一个区间的最值、总量,并在区间的插入、删除和修改中维护这些最值、总量。 线段树拥有良好的树形二分结构,能够高效的完成这些操作,本文将介绍线段树的各种操作以及一些推广。 本文通过3个例子:《蛇》 、《空心长方体》、 《战场统计系统》,讲述线段树中基本的插入、删除、查找操作,和不规则的删除操作,以及到二维的推广。 关键字:线段树 二分 子树收缩 叶子释放 面积树 【正文】 1. 线段的定义及特征 定义1:线段树 一棵二叉树,记为T (a,b),参数a,b表示该节点表示区间[a,b]。b-a记为L。递归定义T[a,b]若L1 [a, (a+b) div 2]为 T的左儿子[(a+b) div 2,b]为T的右儿子。 若L=1 :T为一个叶子节点。 表示区间[1, 10]的线段树表示如下: (以下取对数后均向上取整) 定理1:线段树把区间上的任意一条线段都分成不超过2logL条线段 证明:(1)在区间(a,b)中,对于线段(c,d),如果(c=a) 或 (d=b),那么线段在 (a,b)中被分为不超过log(b-a)。 用归纳法证明,如果是单位区间,最多被分为一段,成立。 如果区间(a,b)的左儿子与右儿子成立,那么如果当c=a时, 若d=(a+b)div2那么相当与其左儿子分该线段,所分该线段数树不超过log((a+b)div 2-a),即不超过log(b-a),成立。 若d(a+b) div 2那么相当于该线段被分为它左儿子表示的线段,加上右儿子分该线段,线段数不超过1+log(b-(a+b) div 2),也不超过log(b-a),成立。 对于d=b的情况证明类似,不再赘述。 (2)在区间(a,b)中,对于任意线段也用归纳法证明。 对于单位区间,最多分为一段,成立。 若(a,b)的左儿子与右儿子均成立,则对于线段(c,d) 若d=(a+b)div 2 则该区间所分该线段等于其左儿子区间所分线段,线段数小于log((a+b) div 2-a)2log(b-a)成立。 若c(a+b) div 2 则该区间所分线段等于其右儿子区间所分线段,线段数小于log(b-(a+b) div 2)2log(b-a)成立。 若12均不成立,则此线段在左儿子区间分该线段满足dV.Lson.b,分该线段数不超过log(b-(a+b) div 2),而在右儿子区间分该线段满足 c=V.Rson.a,分该线段不超过log((a+b) div 2-1),所以在该区间分该线段不超过2log(b-a),成立。 这个结论为线段树能在O(logL)的时间内完成一条线段的插入、删除、查找等工作,提供了理论依据。 【例题一】蛇 在平面上N个点,现在要求一些线段,使其满足以下要求:这些线段必须闭合 线段的端点只能是这N个点 交于一点的两条线段成90度角 线段都必须平行于坐标轴 所有线段除在这N个点外不自交 线段的长度和必须最短 如果存在这样的线段,则输出最小长度,否则输出0。 题目显然要求一个以给定的N个点为顶点的N多边形。所有线段都要和坐标轴平行,所以每个点只能与上下左右四个点相连。由于与一个点相连的两条线段成90度,必须一条平行于X轴一条平行于Y轴。 将所有点排序后发现,在同的点中,设这为P1,P2,P3,P4……Pn,P1要有一条平行X轴的与其相连,就必须连它右边的点——P2,而P3如果再连P2,P2就有两条平行于X轴的线段和它相连,所以P3只能连P4,P5连P6……,同的点也是如此,所以,那么最小长度的问题就解决了。 由于解是唯一,所以关键在于判断由所构出合法——满足线段不自交: 图1. 合法性判断 由于所有线段与坐标轴之一平行,有明显的区间性,可以想到用线段树判断是否自交: 由于只可能是与X轴平行的线段和与Y轴的线段相交,所以可以只考虑与Y轴平行的线段是否有线段与之相交。如果线段(x,y1)-(x,y2)与线段(x1,y)-(x2,y)相交,那么应该符合(x1xx2)(y1yy2),由条件(x1xx2),可以想到先把所有的线段按X坐标排序X轴坐标相同时,事件的顺序要恰当处理。如左图,右端点优先,与Y轴平行的线段其次,然后到左端点。 将Y轴表示的区间建立线段树。排序后,每个线段或线段的端点称为一个事件。按X坐标由小到大,扫描所有事件,如果遇到平行于X轴线段的左端点,则按它的Y坐标当成一个点,插入到表示Y轴区间的线段树中,如果遇到平行于X轴线段的右端点,则把它代表的点从线段树中删除。如果遇到与Y轴平行的线段L1(x,y1)-(x,y2),假设有线段L2(x1,y)

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档