![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
文章平均质量分 84
qkoqhh
这个作者很懒,什么都没留下…
展开
-
hdu 1166(线段树模板)
以前线段树用的是clj神犇的模板。。。然后一直想尝试一下用指针写线段树。。。然后弄出了个指针线段树的模板。。。不过长的挺丑觉得。。#include#include#include#include#include#define inc(i,l,r) for(int i=l;i<=r;i++)#define dec(i,l,r) for(int i=l;i>=r;i--)#def原创 2017-11-27 20:46:06 · 168 阅读 · 0 评论 -
wannafly10(bfs序+BIT)
这题有点意思啊。。考虑到要修改的除自己外还有儿子,孙子,父亲,祖父,别忘了兄弟。。父亲祖父还比较好搞。。然而兄弟儿子什么就有一大堆了,所以需要一种方法映射到区间上才能整段修改。。考虑到兄弟之间深度相同,儿子孙子类似。。所以可以使用bfs序,这样同龄人之间就可以堆一块修改了。。其实还用不着线段树,因为是单点询问,所以差分后直接上BIT就行。。。#inc原创 2018-02-24 00:11:29 · 142 阅读 · 0 评论 -
bzoj2957(线段树+二分)
这题很明显需要维护最大斜率(当然选择线段树辣)。。然后维护完怎么保证单调就很让人烦恼了。。假设有2段已经符合要求的单调序列要合并时,可以想到应该要把左段的最大值求出来,再对右段进行二分查找。。所以合并时还要加多一个二分查找,边找边加上区间就可以。。可以肯定的合并的时候左段肯定是整段加上,而右段是经过消减的,所以在加上区间时应该用整段减去左段,不然直接加右段会将消减去的部分再重新加回来。原创 2018-02-23 12:35:35 · 230 阅读 · 0 评论 -
cf935f(线段树+思维)
首先题目主要关注|a[i]-a[i+1]|,所以很容易想到得先进行差分。。然后操作2就直接变成单点操作了,很舒服。。然后对操作1,主要要判断要在哪个点加x了。。貌似非常麻烦的样子。。然后参考了下q巨的解法。。竟然是构造分段函数。。。orz考虑到对某点+x只影响相邻的2个差值,所以可以运用分段函数处理+x后改变的值。。设差分后的数组为c(c[i]=a[i]-a[i-1]),改变点i,原创 2018-02-21 19:07:01 · 255 阅读 · 0 评论 -
牛客某题(DP+线段树)
都不造怎么用简短的语言表述题目来源了。。直接给传送门把。。 (结尾处这个很容易能够得出dp方程的。。 d[i][j]={d[i−1][j−1]max{d[i][k]} k=1∼ n j>0 j==0然而复杂度为o(n^2),还是会爆时间和空间的。。 对空间非常容易想到用滚动数组。。 照这个思路顺下去会发现,如果不考虑j==0的情况,d[i]是d[i-1]平移之后做了原创 2018-02-07 15:57:35 · 382 阅读 · 0 评论 -
cf920f(线段树+数论)
昨天不造为啥脑残去把操作几次后的状态都维护出来了,简直智障啊qaq多好的一次上分机会就这么没了qaq这个和区间开方同个道理。。直接判断区间每个数是不是都是1或2就行,因为该操作对1和2无效。。然后对任意一个数操作最多目测不超过10次,所以可以不用担心TLE。。然后这个写起来贼简单。。推掉重写不用10分钟A。。窝好恨啊。。#include#include#incl原创 2018-02-03 12:10:11 · 373 阅读 · 0 评论 -
bzoj 3626(神思维+链剖+线段树)
emmmm这道题的思路实在是神。。虽然做过然而做过一遍还是做不出来。。本来还想到了另外一种思路。。。不过写完调来调去发现这个思路完全是错的qaq要是这样把队友坑了那怎么行qaq继续贴清华爷gconeice的题解。。显然,暴力求解的复杂度是无法承受的。考虑这样的一种暴力,我们把 z 到根上的点全部打标记,对于 l 到 r 之间的点,向上搜索到第一个有标记的点求出它的深度统计答案。原创 2018-01-08 14:53:41 · 203 阅读 · 0 评论 -
bzoj 2243
emmm没错又是链剖。。转化成区间之后题目的奇怪询问看出这题是非线段树不可了,记录左右端点的颜色,然后对树链进行合并。。合并时有一个麻烦的问题就是这里的区间是有方向的,所以在合并时要写多几步来处理这个方向问题。。于是代码又长了一大截。。#include#include#include#include#include#include#define inc(i,l,r)原创 2018-01-07 13:22:29 · 163 阅读 · 0 评论 -
bzoj4034(dfs序+BIT/链剖+线段树)
记得以前是用链剖+线段树做的,在链剖的时候顺便维护dfs序,思路简单实现起来就有点麻烦了。。可参照:http://www.cnblogs.com/onlyRP/p/5041702.html回顾这题发现其实主要是2操作针对子树而3操作针对链,而且唯一的询问操作3的链其实是到根的权值和,那么就想能不能直接dfs序进行操作呢?做一遍dfs序后我们可以用前缀和求出权值和,操作1修改点权值就原创 2018-01-07 10:38:18 · 243 阅读 · 0 评论 -
bzoj 1036(树链剖分+线段树)
继续练一下链剖吧。。这次写的蛮久的不过还是尽量避免了盲目使用gdb看到单点修改其实蛮想用BIT的不过鉴于要求区间最大值BIT还是用不上啊,用log^2n的算法担心会超时。。所以这题应该算是比较标准的链剖了。。#include#include#include#include#include#include#define inc(i,l,r) for(int i=l;i<=原创 2018-01-06 22:14:28 · 204 阅读 · 0 评论 -
cd 915E(离散化+线段树)(新线段树模板)
写了一个新的线段树模板,相比上次的尝试这次的代码量有所减少有耶。。emmmm先看看这题吧。。。汪聚聚动态开点pp了然而最终还是T了,毕竟复杂度接近1e7的话确实有点危险。。然后正解其实是离散化。。。太弱了想不到qaq离散化之后直接维护就可以。。然而没怎么写过离散化写起来困难重重蛙qaq还是要多提高自己的姿势水平。。。#include#include原创 2018-01-15 22:25:23 · 338 阅读 · 0 评论 -
codeforce991G(线段树+思维)
maya!!!又FST。。。瞬间少了100ratingQAQ。。。明明都注意到有风险了干嘛还不管蛙qaqaqaqaq好吧。。然后这题。。。又是啥思路都没。。然后又是在汪聚聚的点拨下我才想起上次不是才做过差不多的题嘛。。这么个做题法自己这么会有长进呢~~~这题可以仿照上次的第一个思路,直接开个数据进行修改。。然后主要处理的是修改的最终结果,所以可以不用update。。。这个细节比较灵活。原创 2017-12-29 15:51:56 · 200 阅读 · 0 评论 -
cf914D(线段树+思维)
看到可以允许改一个数我就懵逼了..那我是不是得统计所有情况?感觉完全没思路..然后汪聚聚提出一种思路..算出能被x整除的数的个数..然后就可以处理误差了...(真是好巧妙的思路蛙orz!!)实际操作中只要处理不能被x整除的数,维护gcd,然后如果2个分支都不能整除就可以退出了,如果只有一个那么就要探到叶子,所以一次操作复杂度为logn#include#incl原创 2018-01-22 12:22:58 · 493 阅读 · 0 评论 -
codeforce 620E(dfs序+线段树+位运算)
个人感觉是道不错的题。。很好的帮我理解了dfs序与链剖之间的关系。。两者都是把树结构转化成区间的方法,并且通常需要配合数据结构加以维护。但dfs序侧重与顺序遍历,能够处理子树问题;链剖侧重重链处理,能够处理树中2点之间的链。看来dfs序有必要好好重视一番。。求dfs序后转化成区间,然而这次已经不是单点修改了。。而是子树一起修改,那么就只能用线段树进行维护了。。一开始的思路是记录关键值然后进原创 2017-12-28 21:47:11 · 225 阅读 · 0 评论 -
codeforce 899F
给定长度n的字符串,m次操作,每次删去[l,r](对现字符串而言)中的所有字符c然后我在比赛时想的是把每个字符的个数都统计一遍。。复杂度快要爆炸然而还是抱着侥幸心理写了下去(其实是我不会E),然后陷入了无尽的坑。。。用半小时写出线段树(还好没出错)一交MLE。。。然后把叶子的儿子给砍掉了(这个优化以后还是能用得上滴。。),还不行。。再把满二叉树的节点求出来,然后还不行?!发现得缩到原来的一原创 2017-12-18 23:49:58 · 240 阅读 · 0 评论 -
codeforce 899E(线段树/链表+优先队列)
这题做完之后整场比赛就AK了(虽然是赛后),感觉赛后得把题全做了比赛才会更有意义撒。。找最大重复序列并依次删除。。在汪聚聚的提醒下才发现其实用线段树就能实现啊。。orz维护的东西有点多,实现起来的难度比想象的要小很多,连pushdown都没有,果然CF是注重想法的。。update时考虑维护最长区间,能够产生最长区间的有三种情况 ,做子树的最长区间,右子树的最长区间以及左子树右端重复序列原创 2017-12-21 23:48:20 · 301 阅读 · 0 评论 -
bzoj3073(线段树优化建图)
汪聚聚的题真的是骚。。。直接讲套路建2棵线段树一棵入树、一棵出树,叶子节点分别连边,然后连边的时候可以按照线段树的方式将区间分成logn个区间,在区间之间直接连边,但是会有log^2条还是很糟,因此对条单向边建一个新节点,从入树和出树分别想这个节点连边,然后就只有logn条边了。。由于是跑最短路我们就只用线段树的下标表示思想而不直接写线段树,跑起来还是挺快的。。建完图跑spfa美滋滋。。...原创 2018-08-15 20:52:48 · 242 阅读 · 0 评论