
数据结构——线段树
文章平均质量分 84
XDU_Skyline
Everything is over, everything is just beginning.
展开
-
例题3.9 动态最大连续和 UVa1400
1.题目描述:点击打开链接2.解题思路:本题利用线段树解决。事先构造一棵线段树,在每个线段树的结点中维护三个成员变量:max_sub,max_prefix,max_suffix。设此时线段树结点为x,左右端点分别为l,rmax_sub:区间连续最大和max_prefix:区间前缀最大和max_suffix:区间后缀最大和为了同时知道上述三个最大和的左右端点,令它们都是一个结构体se原创 2015-03-21 11:39:57 · 632 阅读 · 0 评论 -
HDU 1698 Just a Hook
1.题目描述:点击打开链接2.解题思路:本题是线段树的区间更新的基础题,要求把给定的区间中的数都设置为v,然后求和。解法不予赘述。不过注意初始化时候lazy标记均为1。3.代码:#include#include#include#include#include#include#include#include#include#include#include#inclu原创 2015-09-24 20:39:14 · 313 阅读 · 0 评论 -
POJ 2828 Buy Tickets
1.题目描述:点击打开链接2.解题思路:本题要求模拟一个插队的过程,然后输出最终的队列结果。如果想要正向考虑这个过程,可以使用伸展树来方便的模拟。但是这里我们尝试利用简单的线段树来模拟这个过程。不过正向考虑肯定是不行了,需要换一种思考方式。我们不妨先考虑最后一个插队的人,他如果要求插入第i个人后面,那么最终他一定是第i+1个人。假设这个人成功插入后,把他忽略,那么倒数第二个人的要求一定也可以被原创 2015-09-24 19:40:49 · 369 阅读 · 0 评论 -
HDU 2795 Billboard
1.题目描述:点击打开链接2.解题思路:本题可以转化为线段树的单点更新问题。根据题意描述,我们可以维护区间[1,h]上的最大宽度。令结点1是区间[1,h],那么如果tr[1].len3.代码:#include#include#include#include#include#include#include#include#include#include#include原创 2015-09-24 18:13:23 · 325 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers
1.题目描述:点击打开链接2.解题思路:本题是线段树的区间修改基础题。3.代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#原创 2015-09-24 14:12:33 · 320 阅读 · 0 评论 -
HDU 5029 Relief grain (2014年广州赛区网络赛H题)
1.题目描述:点击打开链接2.解题思路:本题是典型的树链剖分题目,不过本题的一个难点在于如何维护每个结点处数量最多的谷物型号。树链剖分经常和离线标记法结合使用,本题亦然。可以用一个vector来维护区间端点处增加的谷物种类。addv[L].push_back(z),subv[R+1].push_back(z)。通过树链剖分可以快速标记好每个区间。接下来就是扫描一遍每个结点,并用一个线段树来维护原创 2015-09-23 23:54:14 · 581 阅读 · 0 评论 -
HDU 5454 Excited Database (2015年沈阳赛区网络赛E题)
1.题目描述:点击打开链接2.解题思路:本题利用线段树解决,根据题意,我们需要建立两棵线段树,分别维护主对角线,副对角线。每个线段树的结点需要维护sum,sumL,sumR,查询时候把矩形看做一个平行四边形加上上下两个三角形来分3次查询。这样,本题即可在O(logN)时间内查询完毕。3.代码:#include#include#include#include#include#i原创 2015-10-24 11:52:03 · 1331 阅读 · 0 评论 -
HDU 5044 Tree (2014年上海赛区网络赛C题)
1.题目描述:点击打开链接2.解题思路:本题是树链剖分的入门题。关于树链剖分的讲解,可以参考该博客:点击打开链接 。本题要求对结点和边都执行add操作,如果用树链剖分,并结合线段树,执行每次操作的时间复杂度可以降为O((logn)^2)。3.代码:#include#include#include#include#include#include#include#includ原创 2015-09-06 17:15:20 · 522 阅读 · 0 评论 -
HDU 5493 Queue (2015年合肥赛区网络赛J题)
1.题目描述:点击打开链接2.解题思路:本题利用名次树解决。一般这种排队类的题目都可以往名次树上考虑。接下来考虑如何确定每个元素的位置。可以由小到大逐个考虑,假设现在考虑第i个元素,有num个人要比他高,由于他前面的人都比他矮,因此可以全部忽略。这时候因为要考虑2种情况,那么我们优先选择会让第i个元素比较靠前的策略。如果是前面有num个人比他高,那么第i个人就在当前队列的第num+1个位置;如原创 2015-09-28 22:40:33 · 636 阅读 · 0 评论 -
POJ 2528 Mayor's posters
1.题目描述:点击打开链接2.解题思路:本题要求给指定的区间覆盖上一种颜色,最后查询可以看到的颜色数量。可以考虑用线段树来模拟这一过程。这里考虑用左闭右开区间来描述,即[a,b+1)。同时,用0来表示此区间没有颜色覆盖或者是多种颜色覆盖的情况。不过由于区间的范围比较大,可以事先进行离散化处理。将区间端点取出后由小到大排序,然后把每个端点都映射为它排序后的下标。这样一来,只有n*2种不同的坐标,原创 2015-09-25 13:41:42 · 389 阅读 · 0 评论 -
例题3.8 频繁出现的数值 UVa11235
1.题目描述:点击打开链接2.解题思路:本题属于RMQ问题。注意到整个数组是非降序的,所有相等的元素都会聚在一起,这样就可以把整个数组进行游程编码(Run Lengh Encodeing RLE)。比如-1,1,2,2,2,4就可以表示为(-1,1),(1,2),(2,3),(4,1)。其中(a,b)表示有b个连续的a。本题中,用Left[pos],Right[pos]分别表示位置pos所在段原创 2015-03-20 15:40:29 · 606 阅读 · 0 评论 -
LA4108 SKYLINE
1.题目描述:点击打开链接2.解题思路:本题用线段树解决。根据题意,我们需要构造一棵线段树,维护区间[L,R)中的长度和这段区间的高度值。不过在pushup的时候,只有左孩子和右孩子都相同时候,才更新当前的区间高度,因为我们要维护的是这段区间确切的高度值,而不是最大值或最小值。这样,只需要边输入边累加答案即可。总的时间复杂度为O(NlogN)。3.代码:#include#includ原创 2015-10-15 17:16:23 · 839 阅读 · 0 评论