st表复习笔记
st表,一种高效的区间最值查询(RMQ)算法。本质其实是一个动态规划。
其实吧,对于看过线性dp的人来说应该不难理解,只是处理有些麻烦。但是本土狗因为-1的问题居然改了许久...

用两个2^i的区间把整个区段覆盖,dp[i][j]表示区间最值,从i开始,向前2^j个数字。根据动态规划的定义,把这个区间分割成两个小区间,于是就有
dp[i][j]=max(dp[i][j-1],dp[i][i+(1<<j-1)]);(然而我在这里处理区间的时候多减了一个1....)
一直分割下去,直到1。复杂度O(nlogn)。
于是查询:
我们找到左右区间大小(y-x+1),把它log一下,再2的次方一下,就成了覆盖区间的最大2^i次方的区间。同理,右区间也是。比较两区间最值,就可以得出最值了。
code:
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=;
int n,m,a[maxn],dp[maxn][],l[maxn]; int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
l[]=-;
for(int i=;i<=n;++i)
{
dp[i][]=a[i];
l[i]=l[i>>]+;
}
for(int j=;j<=;++j)
{
for(int i=;i+(<<j)-<=n;++i)
{
dp[i][j]=max(dp[i][j-],dp[i+(<<(j-))][j-]);
}
}
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
int s=l[y-x+];
printf("%d\n",max(dp[x][s],dp[y-(<<s)+][s]));
}
return ;
}
类比线段树:
优点:
1、码量小
2、快(不用说了,线段树常数大得呦...)
缺点:
1、只能静态
2、只能最值
(完)
st表复习笔记的更多相关文章
- ST表学习笔记
ST表是一种利用DP思想求解最值的倍增算法 ST表常用于解决RMQ问题,即求解区间最值问题 接下来以求最大值为例分步讲解一下ST表的建立过程: 1.定义 f[i][j]表示[i,i+2j-1]这个长度 ...
- ST 表练习笔记
P2048 [NOI2010]超级钢琴 首先按照 前缀和最大值 建立 \(ST\) 表 对于每一个 \(i\) 维护一个以他为起始点的最大的 "超级和弦" (\(ST\) 表 \( ...
- S-T表学习笔记
$O(nlogn)$构造$O(1)$查询真是太强辣 然而不支持修改= = ShØut! #include<iostream> #include<cstring> #includ ...
- ST表算法笔记
[模板]洛谷P3865 #include<cstdio> #include<string> #include<cstdlib> #include<cmath& ...
- 【笔记】自学ST表笔记
自学ST表笔记 说实话原先QBXT学的ST表忘的差不多了吧...... 我重新自学巩固一下(回忆一下) 顺便把原先一些思想来源的原博发上来 一.ST表简介 ST表,建表时间\(O(n\cdot log ...
- [学习笔记]ST表
ST表 给定一个数列$a,O(nlogn)$预处理,$O(1)$查询数列在区间$[l,r]$的最值. 本文介绍求最大值. 实现 预处理 $st[i][j]$表示$max\{a_k\}(k\in[i,i ...
- st表、树状数组与线段树 笔记与思路整理
已更新(2/3):st表.树状数组 st表.树状数组与线段树是三种比较高级的数据结构,大多数操作时间复杂度为O(log n),用来处理一些RMQ问题或类似的数列区间处理问题. 一.ST表(Sparse ...
- 【算法学习笔记】RMQ问题与ST表
\(0.\) RMQ问题 P1816 人话翻译 给定一个长度为\(n\)的数列\(a\),然后有\(m\)组询问,每次询问一个区间\([l,r]\)的最小值. 其中\(m,n\leq10^5\) \( ...
- 「学习笔记」ST表
问题引入 先让我们看一个简单的问题,有N个元素,Q次操作,每次操作需要求出一段区间内的最大/小值. 这就是著名的RMQ问题. RMQ问题的解法有很多,如线段树.单调队列(某些情况下).ST表等.这里主 ...
随机推荐
- python编程基础之十七
字符串:str1 = '123' str2 ="123" str3 = """123""" str4 = '''123' ...
- Fiddle弱网测试
1.打开Fiddler,Rules->Performance->勾选 Simulate Modem Speeds,勾选之后访问网站会发现网络慢了很多: 接下来给大家解释一下这些个都是什么意 ...
- Vue3都使用Proxy了,你更应该了解Proxy
vue3.0的pre-alpha版代码已经开源了,就像作者之前放出的消息一样,其数据响应这一部分已经由ES6的Proxy来代替Object.defineProperty实现,感兴趣的同学可以看其实现源 ...
- IDA快捷键整理
空格键 反汇编窗口切换文本跟图形 ESC退到上一个操作地址 G搜索地址或者符号 N重命名 分号键 注释 ALT+M 添加标签 CTRL+M 列出所有标签 CTRL +S 二进制段的开始地址结束地址 C ...
- php 加入 unless 语法
1. php 的版本 :PHP 7.3.0-dev (cli) (built: Mar 18 2018 00:28:55) ( NTS ) 2. unless 语法结构: unless($cond){ ...
- phpstorm 设置换行符的格式
菜单 > 文件 > 设置
- hadoop-3.1.2启动httpfs
最近有一个需求,要求使用httpfs读取数据,一开始看到httpfs这个词,第一感觉是不是多了个f,是不是https,后来百度一下,其实不然. httpfs其实是使用http协议访问hdfs文件系统: ...
- Go.js 没有中文文档 也没有中文demo 学起来很费劲 给大家整理一个算是详细的文档
<!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...
- Hive On HBase实战
1.概述 HBase是一款非关系型.分布式的KV存储数据库.用来存储海量的数据,用于键值对操作.目前HBase是原生是不包含SQL操作,虽然说Apache Phoenix可以用来操作HBase表,但是 ...
- Java 异常(二) 自定义异常
上篇文章介绍了java中异常机制,本文来演示一下自定义异常 上篇文章讲到非运行时异常和运行时异常,下面我们来看一下简单实现代码. 首先,先来看下演示目录 非运行时异常 也称 检查时异常 public ...