acm-线段树1

线段树

区间查询

  询问某段区间的某些性质(极值,求和,etc)

区间更新

  某些操作影响了某段区间(统一加一个值……)

三个问题

  更新点,查询区间

  更新区间,查询点

  更新区间,查询区间

 

线段树——在O(log2N)的时间内完成每次操作 O(Qlog2N)

 

  线段树的本质是一棵二叉树,线段树的每一个节点记录的是一段区间的信息。

  对于任一非叶子节点,若该区间为[L,R],则左儿子为[L,(L+R)/2]右儿子为[(L+R)/2+1,R] 。最后分到左右儿子相同。

 

struct Tree

{   

int left,right;     //区间的端点   

int max,sum;   //视题目要求而定

};

我们用一个数组a记录节点,且根节点的下标为1,对于任一节点a[k],它的左儿子为a[2*k]它的右儿子为a[2*k+1]。

一维数组即实现了线段树节点的保存。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值