基本算法 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表是利用 ...
随机推荐
- <marquee>滚动文字</marquee>
<marquee>滚动文字</marquee> 水平滚动: <marquee direction=">水平滚动字幕内容</marquee> 垂 ...
- 什么是ECS?
- GRU网络
1.GRU(Gated Recurrent Unit) 为了克服RNN无法远距离依赖而提出了LSTM,而GRU是LSTM的一个变体,GRU保持LSTM效果的同时,又使结构变得简单. 2.GRU结构 G ...
- ubuntu下删除带锁文件夹
1.终端下,cd 到要删带锁文件夹所在目录 2.输入 + 带锁文件夹名称 输入用户密码,解锁成功 3.现在该文件可以进行移动或者删除
- 用cmd命令加密文件夹
比如新建一个叫“大学财务”的文件夹,我希望这个文件夹下的内容是加密隐藏的. 查看的时候需要点击“大学财务.bat”这个文件,然后输入设置的密码即可. Cls @ECHO OFF title Folde ...
- 【计算机】DMA原理1
DMA原理:DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量中断负载.否则,CPU 需要从来源把 ...
- idea设置方法注释
1. File-->Settings-->Editor-->Live Templates 1.1 新建Template Group: 命名为 methodNote 1.2 在meth ...
- random、range和len函数的使用
random.range和len函数的使用 一.random函数 1.random.random()和random.Random(): import random num = random.rando ...
- 请给出一个Scala RDD的HelloWorld例子
[学习笔记]package comimport org.apache.spark.rdd.RDDimport org.apache.spark.SparkConfimport org.apache.s ...
- dubbo分布式服务框架-study2
本文开始对springboot+dubbo集成,使用的版本为springboot 2.0.0.dubbo 2.0.0,步骤如下: 1.添加依赖: <dependency> <grou ...