基本算法 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表是利用 ...
随机推荐
- Re0:在 .NetCore中 EF的基本使用
整理一下目前在用的EFCore 记得好像是因为懒得写sql,于是开始试着用EF 先根据数据库生成一个好东西,嗯 Scaffold-DbContext "Data Source=localho ...
- 《精通并发与Netty》学习笔记(12 - 详解NIO (三) SocketChannel、Pipe)
一.SocketChannelJava NIO中的SocketChannel是一个连接到TCP网络套接字的通道.可以通过以下2种方式创建SocketChannel: 打开一个SocketChannel ...
- Zookeeper 记录
本文主要是学习记录: 部分内容为 <从Paxos到Zookeeper> 部分内容为 zookpper 原理分析 https://www.cnblogs.com/leesf456/p/ ...
- 【计算机视觉】关于OpenCV中GPU配置编译的相关事项
[计算机视觉]关于OpenCV中GPU配置编译的相关事项 标签(空格分隔): [计算机视觉] 前一段发现了OpenCV中关于GPU以及opencl的相关知识,打算升级一下对OpenCV的使用,但是发现 ...
- 记录一次SignalR服务端实现过程
前言:最近手上一个项目需要后端实时推送数据到前端,第一个想到的就是微软的SignalR,由于之前都是平时没事写的Demo,没有用到实际项目中,这次恰好用到了,因此记录下来整个实现过程(网上也有很多类似 ...
- IOS div上下滑动效果
内容放在div中 div加样式:width: 100%;height: 100%;z-index: 70;overflow: auto;
- ssh出现公钥错误问题的解决方法
问题:主机app1推送公钥时,公钥判定错误 原因:之前推过公钥,用的是ip而不是主机名(即hosts文件中的对应关系不对),导致app1的~/.ssh/known_hosts中的公钥对不上. ...
- poj3347(扩大数据,避免小数)
题目链接:https://vjudge.net/problem/POJ-3347 题意:摆放n个正方形,问俯视视角来看时哪些正方形可见. 思路:在刷计算几何专题时刷到这题,但不需要用计算几何的知识.我 ...
- Python+requests维持会话
Python+requests维持会话 一.使用Python+requests发送请求,为什么要维持会话? 我们是通过http协议来访问web网页的,而http协议是无法维持会话之间的状态.比如说我们 ...
- Redis3.2学习记录
nosql 特征:访问量大,高并发,高可用,海量数据 redis3.2作用:减轻关系型数据库查询的压力安装:windows下解压即可使用,启动服务如:redis-server redis-config ...