Segment Tree-线段树学习

Segment Tree-线段树学习

1.指针版本:http://www.cnblogs.com/shuaiwhu/archive/2012/04/22/2464583.html

2.数组版本:http://www.cnblogs.com/Mu-Tou/archive/2011/08/11/2134424.html

其实线段树的模板不好给出,因为其实稍稍改变某个结构或者你需要的功能不一样的话,基本就会变,当然啦,线段树的基本建立都是一样的。

要注意这么个思想: 

递归——线段树的建立以及更新查询等操作最喜欢的就是递归,特别是当你对一个区间二分后再进行判断的时候.


线段树的建立:

如果 left = right ,那么就等于递归结束,到达 [ n , n  ] 的情况 .

否则就一分为 [ left , mid ]   [ mid+1 , right  ] 进入下一层(2n , 2n+1).

线段树的更新 :自上而下

线段树的查询 :自上而下

...

线段树的删除 :自上而下

对线段树的操作还是蛮多的,我还在慢慢学习中...

#define maxn XXX
struct line
{
    int left,right ;
     random;   //这个就是核心吧,如果说left和right是基本的话,random是什么决定了线段树的功能
}a[maxn*4];
void buil ( int l , int r , int n )
{
    int mid ;
    a[n].left = l ;
    a[n].right = r ;
    if( l == r ) {
        random operate;
        return ;
    }
    mid = ( l + r ) / 2 ;
    buil( l , mid , 2*n ) ;
    buil( mid+1 , r , 2*n+1 ) ;
    random operate...
}

delete:(对指针版的尤其重要)

题目链接:

一、最简单型,模板迹象严重

hdu1166 —— 建立 + 单点改变 + 区间求和 (random为区间和)

hdu1754 —— 建立 + 单点改变 + 区间极值 (random为区间极值)

hdu1394 —— 建立 + 单点改变 (逆序数的线段树求法)

hdu2795 —— 建立 + 单点改变 + 区间极值

poj2828 —— 建立 + 单点改变 + 区间极值(如何处理插队问题,逆序思想,十分经典)

poj2886 —— 建立 + 区间查询 + 单点改变 (random域为空位,学会独立思考,独立解决)

现在单点改变已经告一段落了,接下来的学习会进入lazy标记域,这会有一个很大提升

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值