文档详情

算法竞赛第三章数据结构基础.ppt

发布:2017-06-02约6.31千字共47页下载文档
文本预览下载声明
线段树的应用 1、hdu 1166 敌兵布阵 /problem/HDU-1166 线段树单点更新模板题,直接使用以上代码搞定 单点增减,区间求和 线段树的应用 2、hdu 1754 I Hate It /problem/HDU-1754 线段树单点更新模板题,直接使用以上代码搞定 单点替换,区间最值 每次更新的时候在区间结点存储此区间的最大值,查询的时候就不需要每次都查到最下面 更新时间复杂度O(logN),询问时间复杂度O(logN) 线段树的应用 3、洛谷 P3372 【模板】线段树 1 /problem/show?pid=3372 已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 线段树的应用 70分+TLE 将区间更新转换为单点更新 对于区间更新,如果我们每次都更新到底的话,复杂度为N*logN,Q次操作,则总时间为Q*N*logN,这很容易超时。 100分+lazy 加入延迟标记(或者说懒惰标记),简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候。 Lazy-tag思想 在此通俗的解释我理解的Lazy意思: 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,它的节点标记为rt,这时tree[rt].l== a tree[rt].r==b这时我们可以一步更新此时rt节点的sum[rt]的值,sum[rt]+=c*(tree[rt].r-tree[rt] .l+1),注意关键的时刻来了,如果此时按照常规的线段树的update操作,这时候还应该更新rt子节点的sum[]值,而Lazy思想恰恰是暂时不更新rt子节点的sum[]值,到此就return,直到下次需要用到rt子节点的值的时候才去更新,这样避免许多可能无用的操作,从而节省时间 。 举例 已知数组[1,5,4,1,6]; 操作1、对区间[1,3]每个数增加2 问题1、查询区间[1,2]的和 问题2、查询区间[3,4]的和 lazy=0 sum=5 lazy=0 sum=4 lazy=0 sum=6 lazy=0 sum=1 lazy=0 sum=1 lazy=0 sum=6 lazy=0 sum=10 lazy=0 sum=7 lazy=0 sum=17 [1,5] [1,3] [1,2] [3,3] [4,5] [5,5] [4,4] [2,2] [1,1] 已知数组[1,5,4,1,6]; lazy=2 sum=16 lazy=2 sum=10 lazy=0 sum=3 lazy=0 sum=7 lazy=0 sum=6 lazy=0 sum=23 向下延时更新(Pushdown) 建立线段树[l,r],并进行lazy标记 将区间[a,b]每个数加上x 查询区间[a,b]的和 1082 线段树练习 3 /problem/1082/ 线段树模板题 区间更新,区间查询 线段树的应用 4、poj 3468 A Simple Problem with Integers /problem/POJ-3468 题意:一个数列,每次操作可以是将某区间数字都加上一个相同的整数,也可以是询问一个区间中所有数字的和。 模板题,直接看代码吧 线段树的应用 思考题、洛谷 P3373 【模板】线段树 2 /problem/show?pid=3373 已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 线段树的常见操作 1、建立线段树(即初始化Build) 2、更新操作(Update) 3、查询操作(Query) 4、向上回溯(Pushup) 5、向下延时更新(Pushdown) 基本要求:单点替换、单点增减、区间求和、区间最值、区间替换、区间增减 线段树题目大致可以分为四大类: 1、单点更新:最最基础的线段树,只更新叶子节点,然后回溯更新其父亲结点。 2、区间更新:(通常这对初学者来说是一道坎),需要用到延迟标记(或者说懒惰标记),简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候。 3、区间合并:这类题目会询问区间满足条件的连续最长区间,所以回溯的时候需要对左右儿子的区间进行合并。 4、扫描线:这类题目需要将一些操作排序,然后从左到右用一根扫描线(当然是在我们脑子里)扫过去。最典型的就是矩形面积并,周长并等问题。 线段树 线段树学习必看的blog /Mu-Tou/archive/2011/08/11/2134427.html /articles/jaUVBv 数据结构 Keywor
显示全部
相似文档