线段树的入门与优化

本文介绍了线段树这一数据结构,用于解决区间问题。详细阐述了线段树的建立、单点更新和查询,以及如何通过延迟标记优化区间更新,确保操作在O(logn)的时间复杂度内完成。此外,还探讨了线段树在区间查询中的应用和优化。
摘要由CSDN通过智能技术生成

数据结构 线段树

一、区间问题和线段树

有一类区间问题可以抽象成如下模型。

给定包含 n n n 个数的数组 a 1 , a 2 , ⋯ a n a_1, a_2, \cdots a_n a1,a2,an。有两种操作:

  1. 查询区间 [ l , r ] [l, r] [l,r] 最小的数。
  2. 修改第 a i a_i ai x x x

这里,为了解决这个问题,我们介绍一种灵活的数据结构——线段树

我们用一棵二叉树来表示线段树,线段树中的每个结点都表示一个区间。每个非叶子结点都有左右两棵子树,分别对应区间的 “左半” 和 “右半”。为了方便起见,我们给根结点编号为 1 1 1。对于每个结点,其左结点的编号为 2 i 2i 2i,其右结点的编号为 2 i + 1 2i+1 2i+1

对于一个结点,如果其表示的区间为 [ l , r ] [l, r] [l,r]。分情况如果 l = r l = r l=r,那么这个是一个叶子结点。否则令 m i d = ⌊ l + r 2 ⌋ mid = \lfloor \frac{l+r}{2} \rfloor mid=2l+r

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值