
线段树部分总结
文章平均质量分 81
JoyGatsby
这个作者很懒,什么都没留下…
展开
-
poj 2886(线段树单点更新)
poj 2886题意:有N个人,顺时针围成一个圈,现指定第K个人先跳出,然后报一个数A,A>0,表示从跳出的人(跳出的人不算)左边第一个人开始的第A个人跳出,A解题思路:首先我们可以算出当前如果有N个人它的反素数(注意:反素数可以利用dfs求原创 2014-07-20 14:08:39 · 441 阅读 · 0 评论 -
poj 2155 (二维线段树的成段更新)
题意:原矩形所有的元素都为0,改变一个子矩形 ,使该矩形上的0变1,1变0,询问某一点为多少。解题思路:利用二维线段树域值C来记录某个该矩形经过几次操作,然后在询问时算操作的总数即可,奇数为1,偶数相反。注意:无原创 2014-07-20 16:07:38 · 470 阅读 · 0 评论 -
hdu 1542(扫描线+线段树区间更新)
题意:求矩形面积的并解题思路:先将x坐标离散化,扫描线从底向上扫描。所以通过步骤,我们只记录平行与x走的线段,定义结构体struct segment{int l,r,h;// l表示该选段的左坐标,r表示该线段的有坐标,h表示改线 段的高度bool flag;//表示该线段是所在矩形的上边还是下边};所以我原创 2014-07-20 15:53:44 · 459 阅读 · 0 评论 -
poj 3667(区间合并)
题意:有N个房间有两种操作:1 表示当前有Di个人要入住,且房间号必须连续,并输出最左边满足要求的,没有满足要求的输出02 表示从Xi房间开始总共Di个房间要退房。解题思路:在线段树的结构体里增加几个域值:lsum : 表示从该结点的左端点开始的连续的个数。rum : 同上相反sum : 表示该结点最大连续值原创 2014-07-20 15:08:05 · 453 阅读 · 0 评论 -
hdu 1394 线段树单点更新
hdu 1题意:有一个序列,a1,a2,.......,an,现在要使该序列经如下变换:a1, a2, ..., an-1, an (where m = 0 - the initial seqence)a2, a3, ..., an, a1 (where m = 1)a3, a4, ..., an, a1, a2 (where m = 2)原创 2014-07-20 13:52:16 · 439 阅读 · 0 评论 -
hdu 4819 二维线段树点更新
题意:算一个子矩形内的最大和最小的平均值,并将该平均值更新到该子矩形的中心(该矩形的边为奇数)解题思路:利用二维线段树的点更新和query即可注意:二维线段树的在点更新时,需先更新局部的子区间,然后更新全局区间原创 2014-07-20 16:04:07 · 468 阅读 · 0 评论 -
hdu 3308(区间和并)
题意:求最长上升子序列的最大长度。两种操作:Q: 某一段区间的最长上升子序列的最大长度为多少U: 某一点 = val解题思路:如果单单求最长上升子序列,我们可以通过dp,或者分治的思想来求。因为此处操作多,所以上述方法不可行。我们在线段树的结点里增加几个域:lsum : 表示从当前结点的最左端开始的上升子序列的长度rsu原创 2014-07-20 15:33:22 · 513 阅读 · 0 评论 -
uestc Another LCIS(区间更新,区间合并)
题意:求最长上升子序列的最大长度。两种操作:q: 某一段区间的最长上升子序列的最大长度为多少a: 某一段区间都加上val解题思路:如果单单求最长上升子序列,我们可以通过dp,或者分治的思想来求。因为此处操作多,所以上述方法不可行。我们在线段树的结点里增加几个域:lsum : 表示从当前结点的最左端开始的上升子序列的长度rsu原创 2014-07-20 14:46:32 · 427 阅读 · 0 评论 -
hdu 1823 二维线段树点更新
题意:中文题解题思路:利用二维线段树的点更新即可注意:二维线段树的在点更新时,需先更新局部的子区间,然后更新全局区间原创 2014-07-20 15:56:38 · 460 阅读 · 0 评论 -
poj 2528(线段树区间更新)
题意:有n条线段按照顺序进行覆盖,问最后可见的线段有多少。解题思路:我们可以对每条线段编号,然后在线段树内定义一个变量c,且c>0时表示当前该结点被第c种线段覆盖,且c==-1表示当前结点被多种线段覆盖,所以在统计时只要判断当前结点的c是否为-1,如果是继续向下访问,如果不是则直接统计。注意:这里要判断种类有多少,所以要去原创 2014-07-20 14:24:39 · 421 阅读 · 0 评论 -
hdu 4893(线段树 成段更新+区间合并)
题意:给你大小为n的序列,该序列的初始值为0,有3种操作1.序列的第K个位置增加d2.询问一段区间的和3.将一段区间中得每一个数值都改为一个最小的fibonacci数,且该fibonacci数与区间内对应的值距离最近。解题思路:可以用线段树来解决该问题,且线段树中得域:lazy标记:表示当前某区间更新的标记sum:原创 2014-07-30 23:17:12 · 421 阅读 · 0 评论