本文所写内容,学习自下面的博客:
http://www.notonlysuccess.com/index.php/segment-tree-complete/
在代码前先介绍一些原作者的线段树风格:
maxn是题目给的最大区间,而节点数要开4倍,确切的来说节点数要开大于maxn的最小2x的两倍
lson和rson分辨表示结点的左儿子和右儿子,由于每次传参数的时候都固定是这几个变量,所以可以用预定于比较方便的表示
以前的写法是另外开两个个数组记录每个结点所表示的区间,其实这个区间不必保存,一边算一边传下去就行,只需要写函数的时候多两个参数,结合lson和rson的预定义可以很方便
PushUP(int rt)是把当前结点的信息更新到父结点
PushDown(int rt)是把当前结点的信息更新给儿子结点
rt表示当前子树的根(root),也就是当前所在的结点
线段树的题目整体上可以分成以下四个部分:
1.单点更新
使用PushUp( )函数将信息更新到父节点,build( )函数用于初始化,update( )用于更新数据,query( )用于查询。
hdu1166 敌兵布阵
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166
解题链接:http://blog.csdn.net/u012278856/article/details/27591251
hdu1754 I Hate It
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754
解题链接:http://blog.csdn.net/u012278856/article/details/27651905
hdu1394 Minimum Inversion Number
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394
解题链接:http://blog.csdn.net/u012278856/article/details/27590049
hdu2795 Billboard
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795
解题链接:http://blog.csdn.net/u012278856/article/details/27714487
poj2828 Buy Tickets
题目链接:http://poj.org/problem?id=2828
解题链接:http://blog.csdn.net/u012278856/article/details/27861083
2.成段更新
一次更新一段区间的内容,每次更新后不及时把结果更新到子节点去,而是做一个标记。等到下次访问到子节点时在使用标记更新子节点,这样可以很大的提高效率。
使用PushUp( )函数将信息更新到父节点,使用PushDown( )更新子节点。
hdu1698 Just a Hook
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698
解题链接:http://blog.csdn.net/u012278856/article/details/27981699
poj3468 A Simple Problem with Integers
题目链接:http://poj.org/problem?id=3468
解题链接:http://blog.csdn.net/u012278856/article/details/27989847
poj2528 Mayor's posters 离散化
题目链接:http://poj.org/problem?id=2528
解题链接:http://blog.csdn.net/u012278856/article/details/28445883
hdu1556 Color the ball
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556
解题链接:http://blog.csdn.net/u012278856/article/details/29234291
poj3225 Help with Intervals 线段树,成段更新,TLE,求指教。。本人提供测试数据~
题目链接:http://poj.org/problem?id=3225
解题链接:http://blog.csdn.net/u012278856/article/details/29185217
poj1083 Moving Tables 线段树,成段更新
题目链接:http://poj.org/problem?id=1083
解题链接:http://blog.csdn.net/u012278856/article/details/37879979