Senior Data Structure·详解分块思想与树状数组

一、浅析数据结构之用处和高级数据结构之特性

数据结构者,谓之数据之关系。单论数据特性,也不过是数据之间的存储方式罢。但要说更深层次之作用,是运用其存储之特性,建立数学之模型,更方便地才处理数据尔

以上是鲁迅同志说的(鲁迅: exm e x m ???),其实一切的数据结构不过就是一种用于处理数据的、成熟的、合理的结构封装。较低级的数据结构不会支持什么操作,仅是维护自身的存储秩序;而高级数据结构则可以支持许多操作——其实也不过是维护自身数据的秩序而已,只不过在维护其自身秩序的同时,由于其本身结构复杂且特点鲜明,所以会产生许多很优化的算法。
(鲁迅:看在你讲得这么好饶了你!)

而今天我们主要介绍有关 RMQ R M Q RSQ R S Q 问题的、较为基础的高级数据结构。

二、先来介绍分块思想吧

(一)基本性质与证明

其实从本质上来讲,分快更像是一种思想。分块,顾名思义,就是将一个区间分成几块,然后对于每个询问,整合一个或者多个甚至全部区间的信息。但是在这种整合不是随便整合,必须要有技巧、有目的地整合,才会减小时间复杂度。

先看一道例题:

现在你有一个长度为 n n 的序列,有 m 个操作:

1.修改某位置的元素的值

2.将一段区间的元素加上或减去一个值。

3.求一段区间的元素的最大值。

n n , m 50000 50000

让我们考虑分块:
首先第一步,进行区间划分,在这一步我们考虑将整个序列划分成 n n 块,这可以使得其总查询时间最快

证明:

对于搜查整个序列中的一段区间,设这段区间内的完整分块块数是 C C 块,每一段均匀的分块都 S 个元素,那么这一段区间的最复杂形式为:有 C C 个完整区间,并且闭区间[ l , r r ]还在两端包括有不完整的分好的块:

——|—【————|——————|——————|————】—|————

上图中【】表示区间,|与|之间表示分好的均匀块(qwq博主不知道怎么画精美的图啦)

我们可以发现该区间内有 C 段完整区间, 2 2 段不完整区间;而同时,不完整区间的元素数量之和,绝对小于等于 2 S ;那么我们对于这一个区间而言,共需要进行最多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值