基本算法 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表是利用 ...
随机推荐
- Python 零基础知识学习
在开始学习Python之前,首先进入python shell ,输入:import this 命令,如下图所示: Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Py ...
- 如何制作红蓝3d电影(详细教程)
自20世纪初以来,电影制作人一直试图通过制作3D电影来利用我们的双眼.现在,由于大量相对实惠的3D电视,你可以享受电影院以外的额外空间 - 你自己拍摄的视频.对于大预算的电影,电影摄影师使用两个相连的 ...
- Java学习笔记-抽象类与接口
抽象类用于在类中不用具体实现,而在子类中去实现的类 抽象类 抽象类概述 抽象定义:抽象就是从多个事物中将共性的,本质的内容抽取出来 抽象类:Java中可以定义没有方法体的方法,该方法的具体实现由子类完 ...
- poj2253(floyd变形)
题目链接:https://vjudge.net/problem/POJ-2253 题意:给出n个点的坐标,求点1到点2的forg distance,其定义为点1到点2的所有路径中最长边的最小值. 思路 ...
- 深度学习-LeCun、Bengio和Hinton的联合综述
深度学习其实要入门也很简单,不要被深度学习.卷积神经网络CNN.循环神经网络RNN等某些“高大上”的专有名词所吓到或被忽悠,要相信大道至简,一个高中生只要愿意学也完全可以入门级了解并依赖一些成熟的Te ...
- B8 Concurrent JDK中的乐观锁与原子类
[概述] 乐观锁采用的是一种无锁的思想,总是假设最好的情况,认为一个事务在读取数据的时候,不会有别的事务对数据进行修改,只需要在修改数据的时候判断原数据数据是否已经被修改了.JDK 中 java.ut ...
- [转帖]什么是WAL?
什么是WAL? https://www.cnblogs.com/hzmark/p/wal.html 原来数据库与消息中间件 用的是相同的模式 都是基于 顺序写的性能优于 离散写 series 强于sc ...
- [转帖]Linux-Windows 端口转发 netsh 还有 rinetd
Linux-Windows 端口转发 https://www.cnblogs.com/operationhome/p/11284559.html 之前自己学习过 netsh 也曾经用过frp 这次学习 ...
- 大话数据结构(8) 串的模式匹配算法(朴素、KMP、改进算法)
--喜欢记得关注我哟[shoshana]-- 目录 1.朴素的模式匹配算法2.KMP模式匹配算法 2.1 KMP模式匹配算法的主体思路 2.2 next[]的定义与求解 2.3 KMP完整代码 2.4 ...
- (三)mysql SQL 基本操作
文章目录 MySQL服务器对象 mysql 的基本操作 SQL的注释 库操作 表(字段)操作 数据操作 MySQL服务器对象 mysql 服务器对象内部分成了 4 层: 系统(DBMS)----> ...