【高级数据结构】ST 表

news/2025/10/7 13:46:20/文章来源:https://www.cnblogs.com/Cristuff/p/19128431

前言

大部分 ST 表能解决的问题树状数组和线段树都能解决,只不过 ST 表的代码实现更加简单。

ST 表可以求解区间 $[l,r]$ 的最值问题等区间查询。

ST表

ST 表的定义

ST 表是利用倍增思想来解决区间问题的,这样可以缩短时间。

例如,我要求 $\large\max\limits_{i=l}^r a_i$ 的值,那么一般的做法就是从 $l$ 枚举到 $r$,然后用 $ans$ 来记录最大值,但是数据大了显然会超时

所以我们引出了一种新的数据结构 ST 表。

我们定义 $st_{i,j}$ 表示在序列的第 $i$ 项往后 $2^j$ 所包含的序列间的最大值

ST 表的处理

对于 $i=1$ 的情况来说,我们可以画个图:

那么我们可以发现 $st_{1,2} = \max(st_{1,1},st_{3,1})$ 转移过来,所以我们有以下递推式:

$$st_{i,j} = \max(st_{i,j-1},st_{i+2^{j-1},j-1})$$

但是这个 $i$ 有不能比 $n$ 大,所以当 $j$ 确定的时候,有 $i \in [1,n-2^j+1]$.

而 $2^j \le n$,所以有 $j \le \log_2 n$.

注意:我们要提前预处理这个数组。

void init(){ll len=log2(n);for(int j=1;j<=len;j++){for(int i=1;i+(1<<j)-1<=n;i++){st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);}}
}

ST 表的最值求法

对于 $\large\max\limits_{i=l}^r a_i$,我们也考虑用 ST 表的思想,通过两个 ST 表直接维护的区间,然后求最值即可。

那么我们将 $[l,r]$ 分为两个子区间,那么一个区间满足 $[l,r]$ 中 ST 表可维护的最大的子区间,也就是满足 $l+2^k-1 \le r$。

解这个不等式,则可以得出 $k \le \log_2 r-l+1$,这里直接令 $k = \log_2 r-l+1$ 即可。所以整个区间就是 $st_{l,k}$

现在只要反着找就可以了,因为对称性,所以 $k = \log_2 r-l+1$。

我们设该区间的起点为 $L$,那么一定满足 $L+2^k-1=r$。

解这个方程,可以知道 $L = r-2^k+1$,所以整个区间就是 $st_{r-2^k+1,k}$.

所以答案就为 $\max(st_{l,k},st_{r-2^k+1,k})$.

所以就可以写出完整代码了。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+5;
ll st[N][25];
ll n,q,k,ans,l,r;ll read(){int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}return x*f;
}void init(){ll len=log2(n);for(int j=1;j<=len;j++){for(int i=1;i+(1<<j)-1<=n;i++){st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);}}
}
int main(){n=read();q=read();for(int i=1;i<=n;i++) st[i][0]=read();init();while(q--){l=read(),r=read();k=log2(r-l+1);ans=max(st[l][k],st[r-(1<<k)+1][k]);printf("%lld\n",ans);}return 0;
}

这里我求的是区间最大值。

好了现在我们可以做点题了:

  • P3865 【模板】ST 表 && RMQ 问题

  • P1816 忠诚

  • P1890 gcd区间

  • P2880 [USACO07JAN] Balanced Lineup G

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【高级算法】树形DP

前言 本篇文章针对对于树形DP有一定基础的人,没学过的话请出门左转~ 树上背包 P1273 有线电视网 题目简述 有一棵有根树,每个叶子节点都有一个可赚的钱数,每走一条路都有相应的花费。 则在不亏本的情况下从根节点能…

如何提升网站seo排名h5都用什么网站

在日常的数据存储与管理中&#xff0c;移动硬盘作为便携且容量可观的存储设备&#xff0c;深受用户青睐。然而&#xff0c;当您发现联想闪电鲨移动硬盘中的文件突然消失&#xff0c;而您确信并未进行删除操作时&#xff0c;这无疑会令人感到困惑与焦虑。本文旨在为您揭开这一谜…

【高级数据结构】浅谈最短路

前言 最短路是图论中非常典型的模板之一,在生活中也可以到处见到许多。 例如在中国有许多个城市,我现在正在成都,现在我想开车去重庆,而在成都去往重庆的道路上,有许多的道路可以到达,而我想要以最快的速度到达,…

代码随想录打卡|Day53 图论(Floyd 算法精讲 、A * 算法精讲 (A star算法)、最短路算法总结篇、图论总结 ) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

织梦网站新闻列表调用重庆旅游攻略

复原IP 地址 力扣原题链接 问题描述 有效 IP 地址正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是有效 IP 地址&#xff0c…

自己做网站如何销售大学网站开发策划

1、官网下载IDE JetBrains下载 2、IDE下载、安装步骤 这里展示的是如何在Windows上下载、安装Pycharm工具&#xff0c;Linux的步骤类似。 2.1、选择开发者工具 选择开发者工具 2.2、选择Pycharm 选择Pycharm 2.3、选择下载 选择下载 2.4、选择社区版 一般而言&#xff…

2025电位仪厂家最新企业品牌推荐排行榜,纳米粒度及 Zeta 电位仪,Zeta 电位仪公司推荐

在胶体化学、材料科学、生物医药等关键领域,电位仪(尤其是纳米粒度及 Zeta 电位仪)作为精准表征颗粒表面电荷特性与分散稳定性的核心设备,直接决定了科研实验的数据可信度与工业生产的产品质量可控性。无论是锂电池…

PCIe扫盲——物理层逻辑部分基础(二)

上一篇文章中提到了Mux会对来自数据链路层的数据(TLP&DLLP)插入一些控制字符,如下图所示。当然,这些控制字符只用于物理层之间的传输,接收端的设备的物理层接收到这些数据后,会将这些控制字符去除,在往上传…

前沿仿真未来趋势

随着 SoC 设计复杂度不断飙升,仿真(Emulation) 已成为验证流程中不可或缺的一环。本篇博客聚焦混合仿真、云端仿真、ML 驱动及 ICE 等前沿趋势,为你带来技术洞察与实操启发。 1、混合仿真(Hybrid Emulation):软…

公司网站建设多少费用济南兴田德润团队怎么样网络设计收入

基础语法 AppleScript 入门 一、这部分介绍注释,发出声音,弹窗 (1)简单入门 <1>多行注释 (* this is multi comment *) <2>发出响声beep 3(2)#表示使用"Daniel"(英国发音)发出声音,人员选择如下图1所示say "Hello,world" using "Daniel&…

怎么免费申请个人网站郑州个人网站制作公司

实验七 JSP内置对象II 目的&#xff1a; 掌握JSP内置对象的使用。理解JSP的作用域掌握session&#xff0c;application对象的使用 实验要求&#xff1a; 完成实验题目要求提交实验报告&#xff0c;将代码和实验结果页面截图放入报告中 实验过程&#xff1a; 一、结合之前…

网站建设用免费素材开发公司对设计单位奖惩

在Vue中&#xff0c;有多种方法可以动态添加样式。下面介绍几种常用的方法&#xff1a; 1. 使用动态绑定的方式&#xff1a; 可以使用:style指令将一个对象作为值传递给它&#xff0c;对象的属性名表示要设置的样式属性&#xff0c;属性值表示要设置的样式值。例如&#xff1…

StarRocks与Apache Iceberg:构建高效湖仓一体的实时分析平台 - 详解

StarRocks与Apache Iceberg:构建高效湖仓一体的实时分析平台 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

expr命令全解

expr命令全解expr(expression 的缩写)是 Linux/Unix 系统中一款经典的命令行工具,主要用于整数运算、字符串处理和逻辑判断。它通过命令行参数接收表达式,计算并输出结果,常被用于 shell 脚本中处理简单的数值和字…

斑马打印机打印头更换教程

斑马 ZT210 打印头更换教程 1、前期准备 首先将打印机断电,取下碳带和纸。 取碳带步骤:向上松开打印头,将旧碳带向右侧取下。 2、取下旧打印头 碳带和纸取下后,将打印头向下压紧。此时将黑色卡扣向前推动,打印头就…

构造中国剩余定理方程组的解

给你一个同余方程组: \[\begin{cases} x\equiv b_1(\text{mod}\ c_1)\\ x\equiv b_2(\text{mod}\ c_2)\\ \dots\\ x\equiv b_n(\text{mod}\ c_n) \end{cases} \]其中 \(c_i\) 两两互素,求解。 我们令 \(M = \display…

做动感影集的网站wordpress+下载媒体库

目录 1. qsort是什么&#xff1f; 2. 为什么要使用qsort 3. qsort的使用 3.1 qsort的返回值和参数 3.2 qsort的compare函数参数 3.3 int类型数组的qsort完整代码 4. qsort完整代码 1. qsort是什么&#xff1f; qsort中的q在英语中是quick&#xff0c;快速的意思了&#…

2025粒度仪厂家最新品牌推荐榜,喷雾粒度分析仪, 激光粒度仪,激光粒度分析仪,纳米粒度仪公司推荐

在颗粒表征技术愈发关键的当下,粒度仪已成为金属粉、非金属矿粉、医药、化工等多个领域不可或缺的检测设备。然而,市场上粒度仪品牌与产品层出不穷,质量与性能参差不齐,给企业和科研机构的选购带来了诸多困扰。部分…

rsync基本命令和用法

rsync基本命令和用法rsync(remote sync)是一款开源的文件同步工具,以增量传输为核心优势 —— 仅传输源和目标之间的差异部分,而非完整文件,大幅节省带宽和时间。它支持本地文件同步、远程服务器间同步(通过 SSH…