![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
RMQ
文章平均质量分 69
cszhpdx
欸嘿
展开
-
--线段树--
线段树 (Segment Tree) ,一个用来处理 RMQ、RSQ 的数据结构1. 基本思想它的思想也是非常简单,比如有一个长度为 8 的区间,我们把它分成两个长度为 4 的区间,然后对于长度为 4 的区间再分割,每个区间记录信息(比如和) ,我们把这些区间当成一棵树上的节点,对于编号为 kkk 的区间 [l,r][l,r][l,r] ,中间点为 mid=⌊l+r2⌋mid=\lfloor \dfrac{l+r}{2} \rfloormid=⌊2l+r⌋ ,子节点有编号为 2k2k2k 的区间 [l原创 2021-07-04 16:48:05 · 119 阅读 · 0 评论 -
\\树状数组//
1. 基本思想树状数组 ( Binary Index Tree 即二进制编号的树,简称 BIT ) 顾名思义就是把一个数组变成一棵树,实质上还是分块,比如对于原数组 a[]a[]a[] 区间 [1,x][1,x][1,x] ,x=(10101)2x=(10101)_2x=(10101)2 即 x=24+22+20x=2^4+2^2+2^0x=24+22+20 ,可以划分为区间:长度为 242^424 的区间 [1,24][1,2^4][1,24]长度为 222^222 的区间 [24+1,24+原创 2021-06-18 20:52:21 · 66 阅读 · 0 评论 -
---分块---
例题分块就是优雅的暴力搜索,就是把这一个数组分成好多块,每一块预处理最值,区间查询时,取这个区间里的每个块的最值,然后再求那些块覆盖不到的地方的最值(这个步骤暴力就行)显然块的数量和块的大小不能太大也不能太小,所以我们把块的大小取 n\sqrt{n}n ,代码:#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#原创 2021-06-19 17:42:57 · 51 阅读 · 0 评论 -
---ST---
例题ST 算法类似分块,但分块的大小不一样,ST 表中,第 i 个块大小为 2i2^i2i ,我们用 f[i][j]f[i][j]f[i][j] 表示区间 [i,i+2j−1][i,i+2^j-1][i,i+2j−1] 的最值,易得 长度为 ccc 的区间 [l,r][l,r][l,r] 的最值等于 max(f[l][log2c],f[r−2log2c][log2c])\max(f[l][\log_2c],f[r-2^{log_2c}][log_2c])max(f[l][log2c],f[r−2lo原创 2021-06-19 17:45:26 · 101 阅读 · 0 评论 -
-单调队列-
例题单调队列名字逼格很高,但是其实很简单比如,对于题目中样例的数据1 3 -1 -3 5 3 6 7我们要算最小值,我们看最小值是多少假设现在我们有一个特殊的队列,双端队列,每一端都可以 push ,或者 pop ,的队列首先我们看第一个元素,放入队列1此时最小值是 1然后第二个1 3最小值还是 1此时我们放入第三个 -11 3 -1这个时候我们发现,因为 3≥−13 \ge -13≥−1 ,所以只要 3 和 -1 ,都在窗口里面,那么 3 就一定不是最小值,因为窗口一直原创 2021-06-19 17:47:37 · 77 阅读 · 0 评论