数据结构-ST表
数据结构-ST表
前置知识:倍增。
参考资料
暂无
是最简单的能解决 \(\texttt{RMQ}\) 问题的数据结构。特性有不可修改,在线查询。实现方式是倍增。它能求任意区间 \([l,r]\) 的最值,不适用于求和,如果要静态求和请用前缀和数组。
预处理构造
用一个数组 \(f_{i,j}\) 表示 \(i\sim i+2^j-1\) 这段的 \(\texttt{RMQ}\) 值。通过 \(f_{i,j-1}\) 和 \(f_{i+2^{j-1},j-1}\) 来递推 \(f_{i,j}\)。
静态查询
查询区间 \([l,r]\) 的 \(\texttt{RMQ}\) 值时,取 \(k=\lfloor\log_2(r-l+1)\rfloor\),答案可以由 \(f_{l,k}\) 和 \(f_{r-2^k+1,k}\) 推出。
时间复杂度和空间复杂度均为 \(\Theta(n\log n)\)。
code
const int N=1e5+10;
struct ST{
int f[N][20];
void build(int n,int*a){
for(int i=1;i<=n;i++) f[i][0]=a[i];
for(int j=1;j<=18;j++)
for(int i=1;i+(1<<j)-1<=n;i++)
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
int fmax(int l,int r){ //l~r最大值
int k=log2(r-l+1);
return max(f[l][k],f[r-(1<<k)+1][k]);
}
}st;
祝大家学习愉快!
数据结构-ST表的更多相关文章
- 模板 - 数据结构 - ST表/SparseTable
SparseTable,俗称ST表,其功能,就是静态的RMQ(区间最值查询)问题的解决.注意传入查询的时候两个参数的合法性,或者可以进行一次全部初始化来使得越界值不产生负面影响.不过访问越界是写程序的 ...
- 区间最值的优秀数据结构---ST表
ST表,听起来高大上,实际上限制非常多,仅仅可以求最值问题: 为什么?先从原理看起: st表运用了倍增的思想:st[i][j] = min(st[i][j - 1],st[i + 2^(j - 1)) ...
- 模板 - 数据结构 - ST表 + 二维ST表
区间最大值,$O(nlogn)$ 预处理,$O(1)$ 查询,不能动态修改.在查询次数M显著大于元素数量N的时候看得出差距. 令 $f[i][j]$ 表示 $[i,i+2^j-1]$ 的最大值. 显然 ...
- COJ 1003 WZJ的数据结构(三)ST表
WZJ的数据结构(三) 难度级别:B: 运行时间限制:3000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 请你设计一个数据结构,完成以下功能: 给定一个大小为N的 ...
- 数据结构进阶:ST表
简介 ST 表是用于解决 可重复贡献问题 的数据结构. 什么是可重复贡献问题? 可重复贡献问题 是指对于运算 \(\operatorname{opt}\) ,满足 \(x\operatorname ...
- [数据结构与算法-13]ST表
ST表 主要用来快速查询静态数据区间最大值 思路 数组\(A[i][j]\)存储数列\(\{a_i\}\)中区间\(i \in [i, i+2^j)\)的最大值 查询时只需要查询\(max\{A[i] ...
- RMQ求解->ST表
ST表 这是一种神奇的数据结构,用nlogn的空间与nlongn的预处理得出O(1)的区间最大最小值(无修) 那么来看看这个核心数组:ST[][] ST[i][j]表示从i到i+(1<<j ...
- 【笔记】自学ST表笔记
自学ST表笔记 说实话原先QBXT学的ST表忘的差不多了吧...... 我重新自学巩固一下(回忆一下) 顺便把原先一些思想来源的原博发上来 一.ST表简介 ST表,建表时间\(O(n\cdot log ...
- BZOJ 4569 [Scoi2016]萌萌哒 | ST表 并查集
传送门 BZOJ 4569 题解 ST表和并查集是我认为最优雅(其实是最好写--)的两个数据结构. 然鹅!他俩加一起的这道题,我却--没有做出来-- 咳咳. 正解是这样的: 类似ST表有\(\log ...
随机推荐
- 吴裕雄--天生自然C语言开发:数组
] = {1000.0, 2.0, 3.4, 7.0, 50.0}; ]; #include <stdio.h> int main () { ]; /* n 是一个包含 10 个整数的数组 ...
- LeetCode No.106,107,108
No.106 从中序与后序遍历序列构造二叉树 题目 根据一棵树的中序遍历与后序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 示例 例如,给出 中序遍历 inorder = [9,3,15,2 ...
- js求两个数的百分比
function toPercent(num, total) { return (Math.round(num / total * 10000) / 100.00 + "%");/ ...
- scala slick mysql 字段过多 tuple问题
原同步服务正常,因需,对方单表新增字段,超过22条 sbt assembly 编译出错 too many elements for tuple: 26, allowed: 22 scala case ...
- ospf实验二
R1,R2,R3为17.1.1.0网段 1. R4先做rip #rip 1 #version 2 #undo sum.. #netwokr 14.0.0.0 实验第四条 标记tag 100 在R4上做 ...
- web前端校招笔试题集锦
写一个求和的函数sum,达到下面的效果 // Should equal 15 sum(1, 2, 3, 4, 5); // Should equal 0 sum(5, null, -5); // Sh ...
- Android中的AlertDialog和ProgressDialog用法
手机APP对话框是很多APP都有的下面来看下怎么实现的吧, 打开Android studio 然他自动创建好布局和类; 下面我们修改activity_main.xml中的代码 <?xml ver ...
- Java 去掉字符串中的重复数据
有一组字符串比如 北京,北京,上海,上海,上海,武汉-------->要得到 北京,上海,武汉 怎么去掉里面重复的字符串? function DelRepetStr(String ...
- ES:PB级别的大索引如何设计
一.单个大索引的缺陷 如果每天亿万+的实时增量数据呢,基于以下几点原因,单个索引是无法满足要求的: 1.存储大小限制维度 单个分片(Shard)实际是 Lucene 的索引,单分片能存储的最大文档数是 ...
- appium ios真机自动化环境搭建&运行(送源码)
appium ios真机自动化环境搭建&运行(送源码) 原创: f i n 测试开发社区 6天前 Appium测试环境的搭建相对比较烦琐,不少初学者在此走过不少弯路 首先是熟悉Mac的使用 ...