- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
薛矛 解决动态统计问题的两把利刃 ——剖析线段树与矩形切割
解决动态统计问题的两把利刃 ——剖析线段树与矩形切割 目录 1 线段树 2 矩形切割 3 线段树与矩形切割的比较 4 总结 1 线段树 2.1 线段切割 * * 广东北江中学 薛矛 ※ 1.1 线段树的结构 1 线段树 ※ 1.2 线段树的建立 Procedure MakeTree(a,b) Var Now:Longint Begin tot ← tot + 1 Now ← tot Tree[Now].a ← a Tree[Now].b ← b If a +1 b then Tree[Now].Left ← tot + 1 MakeTree(a, ) Tree[Now].Right ← tot + 1 MakeTree( , b) End 线段树是一棵二叉树,线段[a,b]的左右儿子分别为[a, ]和[ ,b] 。线段树的叶子结点是长度为1的单位线段[a,a+1]。 1 线段树 ※ 1.3 线段的插入和删除 可增加一个Cover域来计算一条线段被覆盖的次数: Type TreeNode=Record a,b,Left,Right,Cover:Longint End 插入一条线段[c,d] Procedure Insert(Num) Begin If (cTree[Num].a)and(Tree[Num].bd) then Tree[Num].Cover ← Tree[Num].Cover + 1 Else If c then Insert(Tree[Num].Left) If d then Insert(Tree[Num].Right) End 删除一条线段[c,d] Procedure Delete(Num) Begin If (cTree[Num].a)and(Tree[Num].bd) then Tree[Num].Cover ← Tree[Num].Cover - 1 Else If c then Delete(Tree[Num].Left) If d then Delete(Tree[Num].Right) End 1 线段树 ※1.4 线段树的简单应用 线段树能解决一些最基本的统计问题。但是如果处理一些需要进行修改的动态统计问题,困难就出现了。 例1 在数轴上进行一系列操作。每次操作有两种类型,一种是在线段[a,b]上涂上颜色,另一种将[a,b]上的颜色擦去。问经过一系列的操作后,有多少条单位线段[k,k+1]被涂上了颜色。 1 线段树 线段树中线段的删除只能把已经放入的线段删掉 。而在这道题目中,若给线段[1,15]涂了颜色,可以把[4,9]上的颜色擦去。但线段树中只是插入了[1,15]这条线段,要删除[4,9]这条线段显然是做不到的。因此,我们有必要对线段树进行改进。 1 线段树 ※ 1.5 线段树的改进 不难想到把[1,15]这条线段删去,再插入线段[1,4]和[9,15]。但事实上并非如此简单。 如下图: 若先前已插入了线段[1,8],[8,11] 。按上面的做法,只把[1,15]删去,然后插入[1,4],[9,15]的话,[1,8],[8,11]这两条线段并没有删去,很明显是与实际不符的。于是[1,8],[8,11]也要修改。 但若出现以下这种情况: 1 线段树 以线段[1,15]为根的整棵线段树中的所有结点之前都已
文档评论(0)