线段树
phantompiupiupiu
这个作者很懒,什么都没留下…
展开
-
UVa 11992 add与set结合区间修改线段树
差点忘记还有这么一个线段树的题目,白书上的最后一个例题了,也是足见其难度啊,和一般的题目就是不一样,这个需要考虑的是set和add两种情况同时存在的情况了,这个需要考虑的就是当add先在某一段区间标记了,那么如果下一次当该区间又标记了set的话,实际上前面做到add就没用了,可以直接被抹去了,而如果在set之后又来了一次的set的话,那样的话两者都需要保留下来,那么难点就来了,在pushdown这原创 2016-08-19 16:39:54 · 763 阅读 · 0 评论 -
UVa 1400
刚开始接触到线段树,书上的这个例题就把我难倒了啊,真的比较恶心对于刚学的我来说,实在是写不出来 去网上看的解题报告了。然后才学习到了线段树的基本知识点和框架以及如何去使用线段树。先附上两个链接 http://www.xuebuyuan.com/1224379.html http://blog.csdn.net/w00w12l/article/details/8522521 代码实在是非常的冗转载 2016-08-16 23:12:54 · 165 阅读 · 0 评论 -
POJ 2828第一个线段树
开始接触到数据结构里的线段树了,这块比较新颖,搞了好久白书的那两个题,无奈实在太冗长的代码了,完全搞不懂,在网上找来了http://blog.csdn.net/liuqiyao_01/article/details/9712191 里的习题总结挑了这题做了一下,马上弄懂了基础的单点更新的线段树的写法,包括建树和update的写法。学习线段树我还参考了这篇博文 http://blog.csdn.n原创 2016-08-17 17:05:14 · 323 阅读 · 0 评论 -
HDU 1166再来一个基础线段树
这个是第二个线段树的题目了,在搞懂了一个题目之后这个写起来就顺手多了,几乎完全就自己能够给A掉了,很开心啊。很经典的单点变化的线段树啊。 #include #include #include using namespace std; #define lson l, m, rt<<1 #define rson m+1, r, rt<<1|1 #define mid int m = (l +原创 2016-08-17 18:51:44 · 165 阅读 · 0 评论 -
HDU 1754 线段树
又是一题自己轻松AK的,很开心啊,记录一下,这个题比前面稍微复杂的就是多了一个max值的指标,这个其实只要在结构体里加上就好了,然后写的build和update和query的时候稍加max注意一下 就能轻松求出来了。 #include #include #include using namespace std; #define lson l, m, rt<<1 #define rson m+原创 2016-08-17 20:09:10 · 159 阅读 · 0 评论 -
HDU 1394稍有变化的线段树
这个题目稍微得进行了一点点需要思考的东西,不像前面两题那么的无脑,这个需要把问题抽离出来,我学到的做法是:先进行一步步输入得到数组,每一次输入之后都判断当前的线段树输入的a然后判断在a+1与n-1之间有多少了,可以得到对应的a的前面输入的值比a大的数值有几个,然后再查询过后进行更新线段树,把a给插进去。这样就完成了一个流程了。然后在经过n次之后我们得到了一个ans,但是问题实际上ans只是得到了一原创 2016-08-17 23:58:48 · 158 阅读 · 0 评论 -
HDU 2795单点线段树第二日练手
这种类型现在是第二天做了,也是有点变化的线段树了,需要理解好如何来建树,一开始想着是把长方形数组拉长成一维的h*w的长度的数组然后建立1~h*w的线段树,发现这样不好做啊。最后参考网上的还是采取了以高度为n最大值的来建树,如输入案例来说就是建立了1~3这样的线段树,然后每层的tree数组初始化都是w,然后在update 的时候叶子结点始终是随着插入的wi来进行变化的,那么非叶子结点的tree数组的原创 2016-08-18 16:12:48 · 176 阅读 · 0 评论 -
HDU 1556线段树区间修改
这是第一个入手线段树的区间修改的问题,区间修改本要该一整个区间包括这些结点和子结点的值,那么会非常麻烦,这里学习到了可以使用到laze数组先记录下需要修改的次数,然后等到查询的时候一步步对子节点进行传递和修改涂色次数tre值和子结点的laze数组的值。学习了该博客: http://blog.csdn.net/zip_fan/article/details/46775633 #in原创 2016-08-18 20:36:51 · 197 阅读 · 0 评论 -
HDU 1698 线段树区间
又感觉被虐了,没招啊,之前自己写的是更新到叶子结点的,然后就妥妥的超时了,实际上在区间更新这里白书上写的也蛮明确了,实际上常常都是在满足条件的区间时完成赋值等一系列操作而不继续对子树进行继续操作了,这样省时省力。 这个题目还有一个比较好的就是又是这个laze的使用,也让我看到了laze的多样化,这个laze是以一个未曾出现的值作为这段区间是混色的标志来进行的,因为三种值分别是1,2,3,所以只要原创 2016-08-18 23:24:12 · 159 阅读 · 0 评论 -
POJ 3468 线段树区间
这个题目是第二个区间修改的线段树了,做到现在可以发现线段树真的非常的灵活,特别是区间修改部分,前面的单点修改其实还是也可参看模版的,区间修改就真的非常灵活了了。 这个题目就是区间加法,然后求一个累加和,同样地也是需要一个延迟标志的,也就是lazy,然后还需要一个统计当前区间的全部和的数组。就可以轻松解决了。 再次暂记一笔,线段树的基本操作都已经学习过了,然后更加高深区间合并、扫描线、以及其他的原创 2016-08-19 12:49:39 · 233 阅读 · 0 评论 -
POJ 3667
设计到了区间合并方面的了,其实和一般的线段树没什么太大的变化,但是实际有点难的就是这个不同区间信息的维护也就是延迟标志和信息维护的时候需要注意一下。这个题其实思路对于第一次写这个的还是蛮不好想的,参考博客:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html 点击打开链接 文字解析相当详细。 #include原创 2016-09-12 23:34:00 · 356 阅读 · 0 评论