基本算法 st
今天困得不行,就看了个小算法st,其实和线段树的作用一样,
不过这个算法没有用到数据结构,使用二进制优化的
是O(log(n)n)的时间预处理,然后以O(1)的时间返回(l,r)上的最大或最小
#include <iostream>
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring> using namespace std;
typedef long long ll; const int N =1e5 +;
int a[N];
int n,m;
int f[N][];
void st_prework()
{
for(int i=;i<=n;i++)f[i][]=a[i];
int t = log(n)/log();
for(int j=;j<=t;j++)
{
for(int i=;i<=n-(<<j)+;i++)
{
f[i][j]=max(f[i][j-],f[i+(<<(j-))][j-]);
}
}
}
int main()
{
cin >> n >> m;
for(int i= ;i<=n;i++)
{
scanf("%d",&a[i]);
}
st_prework();
while(m--)
{
int l,r;
scanf("%d%d",&l,&r);
int k=log(r-l+)/log();
printf("%d\n", max(f[l][k],f[r-(<<k)+][k]));
}
return ;
}
st的题目:
P2880 [USACO07JAN]平衡的阵容Balanced Lineup 题解
#include <iostream>
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring> using namespace std;
typedef long long ll; const int N =1e5 +;
int a[N];
int n,m;
int f[N][],d[N][];
void st_prework()
{
for(int i=;i<=n;i++)f[i][]=a[i],d[i][]=a[i];
int t = log(n)/log();
for(int j=;j<=t;j++)
{
for(int i=;i<=n-(<<j)+;i++)
{
f[i][j]=max(f[i][j-],f[i+(<<(j-))][j-]);
d[i][j]=min(d[i][j-],d[i+(<<(j-))][j-]);
}
}
}
int main()
{
cin >> n >> m;
for(int i= ;i<=n;i++)
{
scanf("%d",&a[i]);
}
st_prework();
while(m--)
{
int l,r;
scanf("%d%d",&l,&r);
int k=log(r-l+)/log();
printf("%d\n", max(f[l][k] ,f[r-(<<k)+][k]) - min(d[l][k],d[r - (<<k)+][k]));
}
return ;
}
P2251 质量检测
#include <iostream>
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring> using namespace std;
typedef long long ll; const int N =1e5 +;
int a[N];
int n,m;
int f[N][],d[N][];
void st_prework()
{
for(int i=;i<=n;i++)f[i][]=a[i],d[i][]=a[i];
int t = log(n)/log();
for(int j=;j<=t;j++)
{
for(int i=;i<=n-(<<j)+;i++)
{
d[i][j]=min(d[i][j-],d[i+(<<(j-))][j-]);
}
}
}
int main()
{
cin >> n >> m;
for(int i= ;i<=n;i++)
{
scanf("%d",&a[i]);
}
st_prework();
for(int i=;i<=n-m+;i++)
{
int k =log(m)/log();
printf("%d\n",min(d[i][k],d[i+m- - (<<k)+][k]));
}
return ;
}
基本算法 st的更多相关文章
- 【基础算法-ST表】入门 -C++
前言 学了树状数组看到ST表模板跃跃欲试的时候发现完全没思路,因为给出的查询的时间实在太短了!几乎是需要完成O(1)查询.所以ST表到底是什么神仙算法能够做到这么快的查询? ST表 ST表是一个用来解 ...
- 线段树(two value)与树状数组(RMQ算法st表)
士兵杀敌(三) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比 ...
- LCA在线算法ST算法
求LCA(近期公共祖先)的算法有好多,按在线和离线分为在线算法和离线算法. 离线算法有基于搜索的Tarjan算法较优,而在线算法则是基于dp的ST算法较优. 首先说一下ST算法. 这个算法是基于RMQ ...
- 详解RMQ-ST算法 ST模板
RMQ问题是求解区间最值的问题. 这里分析的是ST算法,它可以对所有要处理的数据做到O(nlogn)的预处理,对每个区间查询做到O(1)查询 ST算法本质是一个DP的过程 这里通过举一个求最大值实例来 ...
- [CF 191C]Fools and Roads[LCA Tarjan算法][LCA 与 RMQ问题的转化][LCA ST算法]
参考: 1. 郭华阳 - 算法合集之<RMQ与LCA问题>. 讲得很清楚! 2. http://www.cnblogs.com/lazycal/archive/2012/08/11/263 ...
- SPOJ RPLN (模板题)(ST算法)【RMQ】
<题目链接> 题目大意:给你一段序列,进行q次区间查询,每次都输出询问区间内的最小值. 解题分析: RMQ模板题,下面用在线算法——ST算法求解.不懂ST算法的可以看这篇博客 >& ...
- LCA(最近公共祖先)——dfs+ST 在线算法
一.前人种树 博客:浅谈LCA的在线算法ST表 二.沙场练兵 题目:POJ 1330 Nearest Common Ancestors 题解博客:http://www.cnblogs.com/Miss ...
- [总结]RMQ问题&ST算法
目录 一.ST算法 二.ST算法の具体实现 1. 初始化 2. 求出ST表 3. 询问 三.例题 例1:P3865 [模板]ST表 例2:P2880 [USACO07JAN]平衡的阵容Balanced ...
- 浅谈ST表
发现自己学的一直都是假的ST表QWQ. ST表 ST表的功能很简单 它是解决RMQ问题(区间最值问题)的一种强有力的工具 它可以做到$O(nlogn)$预处理,$O(1)$查询最值 算法 ST表是利用 ...
随机推荐
- vue项目中使用v-for的方法莫名提示错误
错误示例: 解决方法一: 在v-for后面绑定key,示例如下→ 解决方法二: 点击左下角“设置”>“用户设置”内添加一下代码片段: { "vetur.validation.templ ...
- Java基础——值传递
值传递? 参数传递的值的拷贝,改变拷贝不影响原参数. 引用传递? 参数传递的是参数本身,改变形参,实参也改变. Java中是什么传递? Java中只有值传递 实际情况为什么不对呢? 1. 基本数据类型 ...
- CodeForces 1251A --- Broken Keyboard
[CodeForces 1251A --- Broken Keyboard ] Description Recently Polycarp noticed that some of the butto ...
- Volatility取证使用笔记
最近简单的了解了一下Volatility这个开源的取证框架,这个框架能够对导出的内存镜像镜像分析,能过通过获取内核的数据结构,使用插件获取内存的详细情况和运行状态,同时可以直接dump系统文件,屏幕截 ...
- 2019-10-20 李宗盛 spss作业
SPSS: 1.有关SPSS数据字典的说法,正确的是 A.SPSS数据集的数据字典可以复制到其他数据集中 B.SPSS数据集的数据字典是不能复制的 C.SPSS的数据字典可以通过“复制”和“粘贴”在不 ...
- CSharp实体生成器
专门为C#开发人员定制的一个实体生成器,以往的生成器功能达到了,但是很多细节未考虑到,所以我借鉴“先人”的一些已有的东西,重新定制了一个.当然,需要源码的同学,直接使用IL Spy这个小工具就可以看到 ...
- hanlp自然语言处理包的人名识别代码解析
HanLP发射矩阵词典nr.txt中收录单字姓氏393个.袁义达在<中国的三大姓氏是如何统计出来的>文献中指出:当代中国100个常见姓氏中,集中了全国人口的87%,根据这一数据我们只保留n ...
- Java操作Excle(基于Poi)
有一次有个同事问我会不会有java操作Excle,回答当然是不会了!感觉被嘲讽了,于是开始寻找度娘,找到个小例子,结果越写越有意思,最后就成就了这个工具类. import java.io.Buffer ...
- 剑指offer17:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
1 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 2 思路和方法 (1)先在A中找和B的根节点相同的结点 (2)找到之后遍历对应位置的其他结点, ...
- nginx运行基本指令
测试配置文件: 安装路径下的/nginx/sbin/nginx -t启动: 安装路径下的/nginx/sbin/nginx停止 安装路径下的/nginx/sbin/nginx -s stop 或者是: ...