线段数入门————单点修改+区间查询

线段树是一种二叉搜索树,用于高效处理区间查询和修改操作。文章介绍了线段树的基本概念,包括每个节点的管辖区域、如何表示线段树以及如何构造线段树。通过实例展示了求区间最值的建树、单点修改和区间查询的函数。建议通过杭电1754题进行实战练习。
摘要由CSDN通过智能技术生成

1.什么是线段树:

线段树首先是一种二叉搜索树,为什么说是“线段”树呢?完全可以这么理解,即树中的每一个结点中存有一个区域(从起点到终点就好似线段一般),在下文中我将统一的将其称为该节点的管辖区域这样,我们就可以把线性的区域变为半线性的树。树有很多好处,比如说更改和查询操作的时间复杂度都是O(nodenum),在频繁的查询修改的问题中线段树将会起到非常大的作用。

2.线段树的表示:

为了更好的说明这个问题,我画了一张图给出一个更为直观的印象(我刚开始接触线段树的时候,就是用的这种最笨最朴素的办法,抽象思维能力不够只能借助这样的工具来加深印象)。

说明:假设我们目前有10个数,存储在数组中:

A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10]

将该数组转化为线段树后,将会得到下图:


稍微解释一下,每一个结点里边的数字即该结点的编号,旁边的区间即该结点的管辖区间。

如tree[1]管辖的区间是[1,10]

很容易发现一个规律,即结点node的左儿子的标号是node*2,右儿子的标号是node*2+1.这里就是我们一个重要的构造原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值