线段树

本文所写内容,学习自下面的博客:

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值