国家集训队2004论文集_林涛.pdfVIP

  • 2
  • 0
  • 约1.24万字
  • 约 9页
  • 2019-03-13 发布于江苏
  • 举报
IOI2004 国家集训队论文 林涛 线段树的应用 广西柳铁一中 林涛 摘要】 在竞赛解题中,常遇到与区间有关的操作,比如统计若干矩形并的面积,记 录一个区间的最值、总量,并在区间的插入、删除和修改中维护这些最值、总量。 线段树拥有良好的树形二分结构,能够高效的完成这些操作,本文将介绍 线段树的各种操作以及一些推广。 本文通过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,10] [1,5] [5,10] [1,3] [3,5] [5,7] [7,10] [1,2] [2,3] [3,4] [4,5] [5,6] [6,7] [7,8] [8,10] [8,9] [9,10] ( 以下取对数后均向上取整) 定理1:线段树把区间上的任意一条线段都分成不超过2logL 条线段 证明:(1)在区间(a ,b) 中,对于线段(c,d) ,如果(c=a) 或 (d=b) ,那么线段在 (a ,b) 中被分为不超过log(b-a) 。 用归纳法证明,如果是单位区间,最多被分为一段,成立。 如果区间(a ,b) 的左儿子与右儿子成立,那么如果当c=a 时, 1.若d=(a+b)div2 那么相当与其左儿子分该线段,所分该线段数树不 超过log((a+b)div 2-a) ,即不超过log(b-a),成立。 第 1 页 共 9 页 IOI2004 国家集训队论文 林涛 2 .若d(a+b) div 2 那么相当于该线段被分为它左儿子表示的线段,加 上右儿子分该线段,线段数不超过 1+log(b-(a+b) div 2),也不超过 log(b-a) ,成立。 对于d=b 的情况证明类似,不再赘述。 (2)在区间(a,b) 中,对于任意线段也用归纳法证明。 对于单位区间,最多分为一段,成立。 若(a ,b) 的左儿子与右儿子均成立,则对于线段(c,d) 1.若 d=(a+b)div 2 则该区间所分该线段等于其左儿子区间所分该 线段,线段数小于log((a+b) div 2-a)2log(b-a),成立。 2 .若c(a+b) div 2 则该区间所分该线段等于其右儿子区间所分该线 段,线段数小于log(b-(a+b) div 2)2log(b-a) ,成立。 3 .若1、2 均不成立,则此线段在左儿子区间分该线段满足dV.Lson.b, 分该线段数不超过log(b-(a+b) div 2) ,而在

文档评论(0)

1亿VIP精品文档

相关文档