RMQ求解->ST表
ST表
这是一种神奇的数据结构,用nlogn的空间与nlongn的预处理得出O(1)的区间最大最小值(无修)
那么来看看这个核心数组:ST[][]
ST[i][j]表示从i到i+(1<<j)的范围内的最大/最小值
那么来看看代码吧。
- #include <cstdio>
- #include <algorithm>
- using namespace std;
- int ST[][],n;
- void makeST()
- {
- for(int j=;j<=;j++)
- {
- for(int i=;i+(<<j)-<=n;i++) ST[i][j]=min(ST[i][j-],ST[i+(<<(j-))][j-]);
- }
- return;
- }
- int getpow(int x)
- {
- int ans=;
- while((<<ans)<=x) ans++;
- return ans-;
- }
- int main()
- {
- int m;
- scanf("%d%d",&n,&m);
- for(int i=;i<=n;i++)
- {
- scanf("%d",&ST[i][]);
- }
- makeST();
- int x,y;
- while(m--)
- {
- scanf("%d%d",&x,&y);
- int t=getpow(y-x+);
- printf("%d ",min(ST[x][t],ST[y-(<<t)+][t]));
- }
- return ;
- }
P1816 忠诚
- #include <cstdio>
- #include <algorithm>
- using namespace std;
- int ST[][],n;
- void makeST()
- {
- for(int j=;j<=;j++)
- {
- for(int i=;i+(<<j)-<=n;i++) ST[i][j]=max(ST[i][j-],ST[i+(<<(j-))][j-]);
- }
- return;
- }
- int getpow(int x)
- {
- int ans=;
- while((<<ans)<=x) ans++;
- return ans-;
- }
- int main()
- {
- int m;
- scanf("%d%d",&n,&m);
- for(int i=;i<=n;i++)
- {
- scanf("%d",&ST[i][]);
- }
- makeST();
- int x,y;
- while(m--)
- {
- scanf("%d%d",&x,&y);
- int t=getpow(y-x+);
- printf("%d\n",max(ST[x][t],ST[y-(<<t)+][t]));
- }
- return ;
- }
P3865 ST表模板
好,其实也没啥好说的,简单的一批不是吗?
收回上句......
来看看紫题ST表+并查集 萌萌哒
RMQ求解->ST表的更多相关文章
- 线段树(two value)与树状数组(RMQ算法st表)
士兵杀敌(三) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比 ...
- RMQ问题 - ST表的简单应用
2017-08-26 22:25:57 writer:pprp 题意很简单,给你一串数字,问你给定区间中最大值减去给定区间中的最小值是多少? 用ST表即可实现 一开始无脑套模板,找了最大值,找了最小值 ...
- Codeforces 803G Periodic RMQ Problem ST表+动态开节点线段树
思路: (我也不知道这是不是正解) ST表预处理出来原数列的两点之间的min 再搞一个动态开节点线段树 节点记录ans 和标记 lazy=-1 当前节点的ans可用 lazy=0 没被覆盖过 els ...
- RMQ、ST表
ST表 \(\text{ST}\) 表是用于解决可重复贡献问题的数据结构. 可重复贡献问题:区间按位和.区间按位或.区间 \(\gcd\) .区间最大.区间最小等满足结合律且可重复统计的问题. 模板预 ...
- RMQ(ST表)
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int N, M, ...
- RMQ的st表算法
此算法可用来处理区间最值问题,预处理时间为O(nlogn),查询时间为O(1) 此算法主要基于倍增思想,用以数组st[i][j]表示从第i个元素开始向后搜2的j次方的最值 可用递推的方式求得:st[i ...
- 【模板】RMQ问题 ST表
洛谷3865 #include<cstdio> #include<algorithm> #include<cmath> using namespace std; ; ...
- 51Nod.1766.树上最远点对(树的直径 RMQ 线段树/ST表)
题目链接 \(Description\) 给定一棵树.每次询问给定\(a\sim b,c\sim d\)两个下标区间,从这两个区间中各取一个点,使得这两个点距离最远.输出最远距离. \(n,q\leq ...
- st表 LCA
我当时知道ST表可以 \(O(1)\) 求 LCA 的时候是极为震惊的,可以在需要反复使用 LCA 的时候卡常使用. ST表!用于解决 RMQ问题 ST表 我可能写得不好,看专业的 怎么实现? 考虑把 ...
随机推荐
- 【nodejs】让nodejs像后端mvc框架(asp.net mvc )一样处理请求--自动路由篇(1/8)【route】
文章目录 前情概要 在使用express框架开发的时候,每加一个请求,都在增加一条route请求规则,类似于下面的代码,很烦有木有! app.use('/myroute path', (req, re ...
- kvm虚拟机日常操作命令梳理
KVM虚拟机的管理主要是通过virsh命令对虚拟机进行管理.废话不多说,下面列出kvm日常管理中的命令 1)查看KVM虚拟机配置文件及运行状态 KVM虚拟机默认配置文件位置: /etc/libvirt ...
- B. Interesting drink
链接 [http://codeforces.com/group/1EzrFFyOc0/contest/706/problem/B] 题意 给你n个数,q次查询,每次输入一个m,问n个数中有多少个数小于 ...
- 个人作业Week1
一.<构建之法>提问 1.需求是什么?需求的规范需要明确吗? 2.一个人开发效率非常高,多人开发,个人效率随团队人数上升而直线下降,我们一般需要将大项目拆为小项目,使协作耦合产生的效率负影 ...
- Linux内核分析-创建新进程的过程
分析Linux内核创建一个新进程的过程 task_struct结构体分析 struct task_struct{ volatile long state; //进程的状态 unsigned long ...
- 20135316Linux内核学习笔记第八周
20135316王剑桥<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 一.进程调度与进程调度的时机分析 ...
- 请求数据传入(SpringMVC)
1. 请求处理方法签名 Spring MVC 通过分析处理方法的签名,HTTP请求信息绑定到处理方法的相应人参中. Spring MVC 对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任 ...
- git 使用ssh密钥
一.查看仓库支持的传输协议 1.1查看仓库支持的传输协议 使用命令 git remote -v 查看你当前的 remote url root@zengyue:/home/yuanGit# git re ...
- jQuery(六)
$下常用方法 $().xxx:只能给jq对象用 $.xxx不仅可以给jq用也可以给原生js用,叫做工具方法 $.type() <script> $(function(){ var a= n ...
- [BUAA_SE_2017]个人项目-Sudoku
个人项目作业-数独 Github项目地址 时间预估 PSP2.1 Personal Software Process Stages 预估时间(分钟) 实际耗时(分钟) Planning 计划 60 · ...