-----线段树
文章平均质量分 80
hexiecs
Follow my heart.
展开
-
多颗线段树+间隔点组成的区间求和 hdu4288 coder
题意:hdu4288有3种操作:1.往集合里加入元素 2.删除集合里的元素 3.对集合里下标模5等于3的元素求和加入和删除元素就是线段树里的单点更新,但第三种操作就不那么显然了。由于需要求和的元素都是模5等于3的等间隔的点,当我们对一个节点进行更新的时候,它的左子结点的满足条件的下标在这个节点肯定也满足条件,但右子节点模5等于3的下标并不是这个节点的模5等于3的下标,因为当原创 2015-06-10 00:41:52 · 586 阅读 · 0 评论 -
线段树单点更新 hdu 1754 I Hate It
题意:给n个学生的成绩,可以动态修改某个学生的成绩,要求动态查询某个区间学生的成绩的最大值。线段树单点更新题目,只需用一个数组存储当前节点对应的区间的成绩的最大值,并且把向上更新节点操作(pushup)改为更新该节点的两个子节点的最大值即可。代码:#include #include #include #include #include #incl原创 2015-05-19 23:55:43 · 671 阅读 · 0 评论 -
线段树成段更新 hdu 1698 Just a Hook
题意:给出n根金属棒,和操作数q,初始时每个金属棒价值都为1,每次操作可以把从x到y的金属棒更换材质,铜为1,银为2,金为3,最后统计所有的金属棒总价值是多少。线段树成段更新,需要用到lazy标记,所谓lazy标记就是:更新一个区间的时候不更新到底,只更新到第一个满足更新范围的区间(即范围内的最大的区间),然后给节点加上lazy标记,以后需要更新到该节点的子节点的时候,就把lazy标记原创 2015-05-21 01:03:44 · 939 阅读 · 0 评论 -
线段树区间更新,区间统计 poj 2777 Count Color
题意:将一段长为L的板子染色,板子可分为编号为1,2,3...L的L段,总共有O次操作,操作有两种:1.将A到B区间染为颜色C 2.询问A到B区间有多少种颜色。颜色从1到T编号,不超过30种。思路:1.由于颜色不超过30种,所以可以考虑位运算,每一位代表一种颜色,一个32位整数就可以存储所有的颜色状态。 2.对于操作一,就是区间更新操作,需要用lazy操作,当需要更新子节点原创 2015-05-25 21:39:17 · 795 阅读 · 0 评论 -
线段树 单点更新查询 区间最大值 hdu 2795 Billboard
题意:有一块h*w(1可以把公告牌看作长为h的线段,构建一个线段树,每个节点存储区间的最大值,初始最大值为公告牌的宽度w。如果某区间的最大值大于当前公告的宽度,就可以放在该区间,由于公告优先放在上面,所以选区间的时候也应该先判断左边的区间可不可以,当在某个点放上公告后,该点的最大值应减去该公告的宽度。如果整个区间的最大值小于当前公告的宽度,就说明不能放置。代码:#include原创 2015-05-25 23:25:46 · 433 阅读 · 0 评论 -
线段树 区间求和 poj 3468 A Simple Problem with Integers
题意:给n个整数,求两种操作:1.给一个区间的数都加上一个数 2.查询一个区间的数的和 ,输出每次查询的结果线段树区间求和,注意点:1.使用lazy操作pushdown的时候,应该是子节点的lazy值加上父节点的lazy值,而不是直接赋值成父节点的lazy值,因为子节点可能之前也被操作过2.节点的sum求和的时候应该加上区间的和(虽然直接加上修改值也能过样例TAT)3原创 2015-05-26 10:59:23 · 500 阅读 · 0 评论 -
线段树区间更新,区间统计+离散化 POJ 2528 Mayor's posters
题意:有一个很长的板子(10000000长),在上面贴n(n因为板子有10000000长,直接建树肯定会爆,所以需要离散化处理,对于每张海报,有两个端点值,最后能看到几张海报跟他们的端点值的相对大小有关,跟绝对大小无关,所以就把所有海报的端点离散化处理,总共2n个端点,排序去重,对应p(p代码:#include #include #include #include原创 2015-06-02 13:16:30 · 714 阅读 · 0 评论 -
线段树 区间合并 poj 3667 Hotel
题意:初始时n个空房间,有m次操作,分为两种:1.找出最靠左的连续d个空房间的左端点值,并把该区间的房间占用 2.使指定区间的房间不被占用。输出每次操作1的左端点值,如果找不到,输出0。很明显的一个思路是把每个节点所在区间的最长的连续空房间和该区间是否被覆盖作为节点信息对于操作1,如果当前节点的值小于d,那当前区间肯定不行。如果不小于d,先看左子节点的值是否大于等于d(因为要找出原创 2015-06-04 09:25:55 · 537 阅读 · 0 评论 -
矩形面积并 hdu 1542 Atlantis
题意:给n个矩形,求总面积。矩形面积并,需要用到扫描线,关于扫描线有博客已经做了非常好的解释,大家可以自行百度。这里详细讲一下为什么在更新线段的时候线段的右端点值要减一,然后更新的时候再加一,具体来说就是在离散化后的横坐标数组(记为X【】)查询右端点的位置时,比如当前线段的右端点对应的位置是r,左端点对应的位置是l,我们更新的时候更新的是【l,r-1】,记为【L,R】,而计算覆盖长度的原创 2015-06-08 13:21:27 · 517 阅读 · 0 评论 -
矩形周长并 hdu 1828 Picture
题意:给n个矩形,求他们的总周长跟面积并类似,唯一不同的是每个节点还需要保存它所在的区间有多少个不连续的区间,则宽的个数就为该个数的二倍。具体做法是用两个数组分别保存区间的左端点和右端点是否被覆盖。如果当前区间整个被覆盖,那么左右端点都被覆盖,宽的个数就为2.如果该区间没有被覆盖,那么宽的个数就为左子结点宽的个数+右子节点宽的个数-左右子区间是否连起来,如果连起来了,那么宽的个数应该减原创 2015-06-09 13:35:44 · 589 阅读 · 0 评论 -
线段树入门题 hdu1166 敌兵布阵
题意:动态查询一段区间的和,支持单点更新。开始刷线段树了,这是入门第一题。。。最基本的线段树操作,递归建树,递归查询,递归修改,向上更新节点,每个节点的值代表该节点对应区间的和 。代码:#include #include #include #include #include #include#include #include #include原创 2015-05-19 11:06:35 · 678 阅读 · 0 评论