ST表(离线RMQ)
离线RAQ时,预处理为O(n*lgn),查询为O(1)的算法,比较有意思的一种算法
放个模板在这可以随时看
//ST表(离线)
//预处理 O(n*lgn) , 查询 O(1)
#include <iostream>
#include <stdio.h>
using namespace std;
#define MX 10005 int n;
int a[MX];
int st[MX][]; // st[i][j] 是第 i 个数为左端点长为 2^j 区间的最大值
int lgn[MX]; //lgn[i] 是 lgn(i) 的值 void Init()
{
lgn[]=-;
for (int i=;i<=n;i++)
{
if ((i&(i-))==) lgn[i]=lgn[i-]+;
else lgn[i]=lgn[i-];
st[i][]=a[i];
}
for (int i=;i<=lgn[n];i++) //区间长为 2^i 次方
for (int j=;j+(<<i)-<=n;j++)
st[j][i]=max(st[j][i-],st[j+(<<(i-))][i-]);
} int inquery(int a,int b)
{
int k = lgn[b-a+];
return max(st[a][k],st[b-(<<k)+][k]);
} int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
scanf("%d",&a[i]);
Init();
int m;
scanf("%d",&m);
while (m--)
{
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",inquery(l,r));
}
return ;
}
ST表(离线RMQ)的更多相关文章
- POJ 3264 Balanced Lineup 【ST表 静态RMQ】
传送门:http://poj.org/problem?id=3264 Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total S ...
- ST表解决RMQ问题
RMQ问题: RMQ(Range Minimum/Maximum Query),区间最值查询.对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间 ...
- ST表 求 RMQ(区间最值)
RMQ即Range Minimum/Maximun Query,中文意思:查询一个区间的最小值/最大值 比如有这样一个数组:A{3 2 4 5 6 8 1 2 9 7},然后问你若干问题: 数组A下标 ...
- ST函数(ST表)RMQ O(1)查询 离线
ST算法是基于倍增的动态规划算法. #include<iostream> #include<cstdio> #include<cstdlib> #include&l ...
- 基于ST表的RMQ
RMQ算法,是一个快速求区间最值的离线算法,预处理时间复杂度O(n*log(n))查询O(1),所以是一个很快速的算法,当然这个问题用线段树同样能够解决. 问题:给出n个数ai,让你快速查询某个区间的 ...
- st表、RMQ和LCA
int lca(int x,int y) { if(de[x]<de[y]) swap(x,y); int d=de[x]-de[y]; for(int i=log2(d);i>=0;i- ...
- BZOJ3230 相似子串[后缀数组+二分+st表]
BZOJ3230 相似子串 给一个串,查询排名i和j的子串longest common suffix和longest common prefix 思路其实还是蛮好想的,就是码起来有点恶心.可以发现后缀 ...
- luogu 3865 【模板】ST表
我太菜了 今天才学会现场脑补ST表静态RMQ #include<iostream> #include<cstdio> #include<algorithm> #in ...
- HDU 2586 How far away ?(经典)(RMQ + 在线ST+ Tarjan离线) 【LCA】
<题目链接> 题目大意:给你一棵带有边权的树,然后进行q次查询,每次查询输出指定两个节点之间的距离. 解题分析:本题有多重解决方法,首先,可用最短路轻易求解.若只用LCA解决本题,也有三种 ...
随机推荐
- ELK学习笔记
一.elk框架和java1.8环境搭建 1.1: 环境说明 约定: centos6 iptables关闭 如果不关闭的话,需要开放对应的端口访问 selinux关闭 1.2: ELK简介 els:El ...
- linux下confstr与uname函数_获取C库与内核信息
#include <stdio.h> #include <sys/utsname.h> //uname int main(int argc, char **argv[]) { ...
- <十>读<<大话设计模式>>之观察者模式
观察者模式也是比較简单的一种模式,可能从名字上理解无法明确,但真正理解其含义之后就非常easy了,说实话在自己来发的项目中自己也用到过.仅仅只是不知道它叫观察者罢了,仅仅要懂面向对象的对继承多态理解非 ...
- Excel中如何将时间戳转为时间?
Unix时间戳转换Excel时间? Excel中如何将时间戳转为时间? Excel默认不支持Unix格式时间戳,这在导入数据时十分不便.可以用以下公式将时间戳转换成Excel格式的时间: =(x+8* ...
- Vue webpack配置文件
一.代码地址 github:https://github.com/MengFangui/VueWebpackConfig 二.配置说明 1.命令 (1)npm i 安装依赖包 (2)num run d ...
- Linux的fuser命令解析
fuser命令是用来显示所有正在使用着指定的file, file system 或者 sockets的进程信息. 例一: #fuser –m –u /mnt/usb1 /mnt/usb1: 1347c ...
- 关于winform中子窗体最大化的问题
在构建winform程序时,普遍的做法是将主窗体设置成 MDI Container,使它可以放置工作窗体(Form 而非 UserControl).工作窗体作为子窗体填充工作区,一般设置 FormBo ...
- src和href使用总结
src img 图片 <img src="/img/1.png" alt="1" /> rame iframe 框架集 <iframe src ...
- CSDN开源夏令营 百度数据可视化实践 ECharts(4)
ECharts知识点总结: 在应用过程中总会遇到一些难以理解的概念和属性,这里就总结了一下比較难的知识点,方便理解概念.进而更好的掌握ECharts. (1)1. 一个完整的option包括什么?能 ...
- Scala 机器学习库
自然语言处理 ScalaNLP-机器学习和数值计算库的套装 Breeze -Scala用的数值处理库 Chalk-自然语言处理库. FACTORIE-可部署的概率建模工具包.用Scala实现的软件库. ...