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表的更多相关文章

  1. 线段树(two value)与树状数组(RMQ算法st表)

    士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比 ...

  2. RMQ问题 - ST表的简单应用

    2017-08-26 22:25:57 writer:pprp 题意很简单,给你一串数字,问你给定区间中最大值减去给定区间中的最小值是多少? 用ST表即可实现 一开始无脑套模板,找了最大值,找了最小值 ...

  3. Codeforces 803G Periodic RMQ Problem ST表+动态开节点线段树

    思路: (我也不知道这是不是正解) ST表预处理出来原数列的两点之间的min 再搞一个动态开节点线段树 节点记录ans 和标记 lazy=-1 当前节点的ans可用  lazy=0 没被覆盖过 els ...

  4. RMQ、ST表

    ST表 \(\text{ST}\) 表是用于解决可重复贡献问题的数据结构. 可重复贡献问题:区间按位和.区间按位或.区间 \(\gcd\) .区间最大.区间最小等满足结合律且可重复统计的问题. 模板预 ...

  5. RMQ(ST表)

    #include<iostream> #include<cstdio> #include<cmath> using namespace std; int N, M, ...

  6. RMQ的st表算法

    此算法可用来处理区间最值问题,预处理时间为O(nlogn),查询时间为O(1) 此算法主要基于倍增思想,用以数组st[i][j]表示从第i个元素开始向后搜2的j次方的最值 可用递推的方式求得:st[i ...

  7. 【模板】RMQ问题 ST表

    洛谷3865 #include<cstdio> #include<algorithm> #include<cmath> using namespace std; ; ...

  8. 51Nod.1766.树上最远点对(树的直径 RMQ 线段树/ST表)

    题目链接 \(Description\) 给定一棵树.每次询问给定\(a\sim b,c\sim d\)两个下标区间,从这两个区间中各取一个点,使得这两个点距离最远.输出最远距离. \(n,q\leq ...

  9. st表 LCA

    我当时知道ST表可以 \(O(1)\) 求 LCA 的时候是极为震惊的,可以在需要反复使用 LCA 的时候卡常使用. ST表!用于解决 RMQ问题 ST表 我可能写得不好,看专业的 怎么实现? 考虑把 ...

随机推荐

  1. 开启mac上印象笔记的代码块

    Mac 印象笔记左上角菜单栏:偏好设置-->软件更新-->开启代码块 (Preferences -> Software Update -> Enable code block) ...

  2. LDAP-openldap服务部署和测试(YUM安装)

    1. 概述2. 服务端部署过程2.1 软件包说明2.2 部署过程2.3 配置过程3. 测试4. 生成LDIF格式文件4.1 安装migrationtools工具4.2 用migrationtools生 ...

  3. StoryLine3变量存储与跳转后台时的使用

    前言 公司项目原因,接触到storyline3(后面简称SL)课件制作工具,类似ppt,但是又多了互动.交互,且页面元素可添加触发器,触发器中可执行js代码. 1.官方教程 在SL中,会有“了解详情. ...

  4. vim命令记录

    最近开始用vim作为日常编辑器,由于vim的命令过多,现在记录一下

  5. php 中 opendir() readdir() scandir()

    opendir(path,context)若成功,则该函数返回一个目录流,否则返回 false 以及一个 error.可以通过在函数名前加上 “@” 来隐藏 error 的输出. readdir() ...

  6. 软工个人作业-博客作业-WEEK2

    1.是否需要代码规范:    (1)这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西.        首先来说,从短期上和个体上来看,一个团队的代码风格必然会在一定程 ...

  7. let命令和块级作用域

    学习了阮一峰老师的ES6,http://es6.ruanyifeng.com/,收益良多. 一.let命令1.概念:let命令用于声明变量,和var类似,但是使用let命令所声明的变量只有在该变量所在 ...

  8. 3-Python3从入门到实战—基础之数据类型(数字-Number)

    Python从入门到实战系列--目录 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Sets(集合) Dictionar ...

  9. WIN10护眼色

    参看文章:http://www.xitongcheng.com/jiaocheng/win10_article_10326.html WIN10:[HKEY_CURRENT_USER\Control ...

  10. 面象对象设计原则之三:里氏替换原则(The Liskov Substitution Principle,LSP)

    里氏代换原则由2008年图灵奖得主.美国第一位计算机科学女博士Barbara Liskov教授和卡内基·梅隆大学Jeannette Wing教授于1994年提出.其严格表述如下:如果对每一个类型为S的 ...