RMQ,即区间最值查询,给定一个序列,求区间l-r的最大值、最小值。

st表求RMQ,预处理On*logn,查询O1

预处理:

void init_rmq()
{
for(rll j=1;j<=lg[n];++j)//从当前点开始的2的j次方个点
{
for(rll i=1;(i+(1<<j)-1)<=n;++i)//i+(1<<j)-1不能越界
{
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);//取最大值
}
}
}

查询:

这里l到r不一定刚好是2^j,这里要么越界,要么有重复。

我们是求最值,又不是求和,有没有重复又有什么关系呢?那我们就让他有重复的部分。

代码:

ll rmq(ll l,ll r)
{
ll k=log(r-l+1)/log(2);//处理log
return max(f[l][k],f[r-(1<<k)+1][k]);//这里有重合部分,但重合部分取最大值不影响最后结果(又不是求和)
}

一道简单的例题:

信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn)

代码:

#include<bits/stdc++.h>
#define ll long long
#define rint register int
#define rll register long long
using namespace std;
const ll N=1e5+5;
ll n,m;
ll f[N][20];
int lg[N];
inline ll read()
{
ll x=0;
bool flag=false;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') flag=true;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<3)+(x<<1)+(ch^'0');
ch=getchar();
}
return flag?~x+1:x;
}
void init_rmq()
{
for(rll j=1;j<=lg[n];++j)//从当前点开始的2的j次方个点
{
for(rll i=1;(i+(1<<j)-1)<=n;++i)//i+(1<<j)-1不能越界
{
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);//取最大值
}
}
}
ll rmq(ll l,ll r)
{
ll k=log(r-l+1)/log(2);//处理log
return max(f[l][k],f[r-(1<<k)+1][k]);//这里有重合部分,但重合部分取最大值不影响最后结果(又不是求和)
}
int main()
{
n=read(),m=read();//n 点的个数 m 操作数
for(rll i=1;i<=n;++i)
{
f[i][0]=read();//读入数据
}
for(rint i=1;i<=n;++i)
{
lg[i]=lg[i-1]+(1<<lg[i-1]==i);//处理log
}
init_rmq();//初始化
for(rll l,r,i=1;i<=m;++i)
{
l=read(),r=read();
printf("%lld\n",rmq(l,r));//查询
}
return 0;
}

最新文章

  1. Spring8:一些常用的Spring Bean扩展接口
  2. ElasticSearch 5学习(8)——分布式文档存储(wait_for_active_shards新参数分析)
  3. 【转】PowerShell入门(十):使用配置文件
  4. AppleHDA 10.9.3 disassm 1
  5. Why GUID primary keys are a database’s worst nightmare
  6. SoapUI接口测试&#183;第一个HTTP Request接口请求和断言
  7. jLink V8调试exynos 4412 u-boot的几点补充
  8. iPhone中国移动收不到彩信,联通不用设置都可以,具体设置方法:
  9. AD查询1000条限制和解决方案
  10. js常用方法:
  11. PowerShell_零基础自学课程_9_高级主题:静态类和类的操作
  12. Sharepoint2010 通过 WebFeature 修改web.config
  13. thinkphp5路由心得
  14. tiny6410 烧写uboot 转载
  15. [WeChall] Training: Crypto - Caesar I (Crypto, Training)
  16. move_base
  17. LA 3266 田忌赛马
  18. html to pdf小工具,支持evernote导出的html和firefox插件scrapbook
  19. sublime text 3 搭建python ide
  20. ArcGIS runtime for wpf 部署

热门文章

  1. 使用NFS作为Glance存储后端
  2. css自定义省略实例2
  3. Vue报错: Uncaught (in promise) TypeError: Cannot read properties of undefined (reading &#39;protocol&#39;)
  4. C# 给Word中的字符添加强调符号(着重号)
  5. 【mq】从零开始实现 mq-13-注册鉴权 auth
  6. MASA Auth - 权限设计
  7. 第30章 LeetCode 72 编辑距离
  8. [2-SAT]编码
  9. “摆地摊“都找不到全栈工程师?JNPF帮你分分钟搞定!
  10. 1. 时序练习(广告渠道vs销量预测)