ST表超级详解 关于ST表,有很多文章,这里本蒟蒻也来发一波~~ 希望能为您提供帮助~~ 1.ST表的介绍 ST表算法全称Sparse-Table算法,是由Tarjan提出的一种解决RMQ问题(区间最值)的强力算法。离线预处理时间复杂度 θ(nlogn),在线查询时间 θ(1),可以说是一种非常高效 ...
分类:
其他好文 时间:
2020-02-08 14:05:00
阅读次数:
113
```cpp //静态区间最值 #include using namespace std; const int maxn = 1e5 + 5; int ST[maxn][25]; int a[maxn]; void STinit(int n) { for (int i = 1; i > n >> m... ...
分类:
其他好文 时间:
2020-02-07 22:29:26
阅读次数:
89
这道题就是单调队列的裸题 今天刚学的单调队列 前几天刚学习完单调栈 感觉这两个东西非常相似哇 黄哥的一句话说破了他 他俩的区别就像队列和栈的区别233333 有关这道题倒没有太多说的 就是模拟队列 单调递增递减来找到区间最值 我这里用了数组模拟 问题就是G++ T了/// 而C++ AC 就很迷。。 ...
分类:
其他好文 时间:
2020-01-31 18:32:19
阅读次数:
79
引入 一个长度为$n$的数组,有$m$次查询,每次查询区间$[l,r]$内第$k$小的元素。 如果使用暴力,肯定不可以 使用线段树?可是我只会查询区间最值啊。 那么我们把问题再次简化一下,查询$[1,n]$第$k$小的元素,要求使用线段树来实现。 权值线段树 为了解决这个问题,我们引入一个名词: 权 ...
分类:
其他好文 时间:
2020-01-24 18:50:03
阅读次数:
102
ST算法能在O(NlogN)时间内对数列a预处理, 以O(1)的时间复杂度在线回答”数列a中下标在l~r之间的数的最大(小)值是多少“预处理:1)f[i][j]表示数列a中下标在子区间[i,i+2^j-1]里的数的最大(小)值, 即i开始的2^j个数的最大(小)值2)f[i][j]=max(f[i] ...
分类:
编程语言 时间:
2020-01-23 21:16:13
阅读次数:
130
ST算法能在O(NlogN)时间内对数列a预处理,以O(1)的时间复杂度在线回答“数列a中下标在l~r之间的数的最大(小)值是多少预处理:f[i][j]表示数列a中下标在子区间[i,i+2^j-1]里的数的最大(小)值,即i开始的2^j个数的最大(小)值f[i][j]=max(f[i][j-1],f ...
分类:
编程语言 时间:
2020-01-23 19:48:21
阅读次数:
81
"?? ????" 题意:价值 = 区间和 × 区间最小值,求数组的子区间的最大价值 (1) 区间和 前缀和 (2)O(n^2) 枚举区间 O( n ) 枚举元素 ,根据当前元素查询相应区间和 对每个元素,维护他作为最小值的左右端点,枚举数组中的元素,该元素大于0为例,查找( i , r [ i ] ...
分类:
其他好文 时间:
2020-01-17 13:25:11
阅读次数:
58
今天学弟在群里直播讲课,讲了RMQ,以前摸鱼太多这个题目并没看出来是啥,然后就去凑了个热闹。 RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ ...
分类:
其他好文 时间:
2020-01-14 10:15:01
阅读次数:
100
一,预习 1,st表类似于线段树和树状数组,用来解决区间最值查询问题。 2,查询的时间复杂度为o(1). 3,假设你有一个有n个数的数组a[n],简单的结构是st[n][t]表示的是从a[n]中第n个数开始,长度为2^t的最大值。(我也感觉有点..) 4,我确实看懂了st表的预处理。 (https: ...
分类:
其他好文 时间:
2019-12-22 11:04:33
阅读次数:
82
然而好像没有平衡树 还是题解包: T1:森林 树上主席树+启发式合并。 然而好像知道标签就没啥了。在启发式合并时可以顺手求lca 然而这题好像可以时间换空间(回收空间) T2:影魔 难点在于考虑贡献的来源 考虑一个区间两端点和区间最值(不含端点)的关系 小,中,大:贡献p1 大,小,大:贡献p2 大 ...
分类:
其他好文 时间:
2019-12-19 09:48:03
阅读次数:
83