当前位置: 首页 > news >正文

谈一类易实现的非四毛子线性 RMQ

考虑设 \(B=64\),每 \(64\) 个元素分一块。

处理跨块查询

这样的查询,是由一段的后缀拼上若干整块拼上一段前缀。

因此我们维护每个块的前后缀最值以及将每一块的最值拿出建立 \(ST\) 表。

复杂度 \(O(n+\frac{n}{B}\log\frac{n}{B})=O(n)\)

处理单块查询

这也是为什么 \(B=64\)

考虑对每一块从左往右做单调栈,那么询问 \([l,r]\),等价于询问以 \(r\) 作为右端点时,单调栈内下标 \(\ge l\) 的最小值。

因为 \(B=64\),用一个 unsigned long long 即可保存单调栈状态。

查询时,我们先通过位运算将 \(<l\) 的位置为零,然后查询最低位即可。

示例代码:

namespace ST{int pre[N],suf[N],st[14][N/B],sz,lg[N];ull sta[N];int Sta[65],top;void init(){lg[0]=-1;for(int i=1;i<=n;++i)lg[i]=lg[i>>1]+1;for(int i=0;i<n;++i){if(i&63)pre[i]=max(pre[i-1],a[i]);else pre[i]=a[i];}for(int i=n-1;~i;--i){if(i==n-1||(i+1&63)==0)suf[i]=a[i];else suf[i]=max(suf[i+1],a[i]);if(!(i&63))st[0][i>>6]=suf[i];}sz=(n-1>>6)+1;for(int j=1;(1<<j)<=sz;++j)for(int i=0;i<=sz-(1<<j);++i)st[j][i]=max(st[j-1][i],st[j-1][i+(1<<j-1)]);for(int i=0,h=0;i<n;++i){if((i&63)==0){sta[i]=1ull;h=i;Sta[top=1]=i;continue;}sta[i]=sta[i-1];while(top&&a[Sta[top]]<a[i]){sta[i]^=1ull<<Sta[top]-h;--top;}sta[i]|=1ull<<i-h;Sta[++top]=i;}}int get(int l,int r){if(l>r)return 0;int k=lg[r-l+1];return max(st[k][l],st[k][r-(1<<k)+1]);}int ask(int l,int r){if((l>>6)!=(r>>6)){return max({suf[l],pre[r],get((l>>6)+1,(r>>6)-1)});}int h=(r>>6)<<6;return a[l+__builtin_ctzll(sta[r]>>(l-h))];}
}
http://www.rkmt.cn/news/19549.html

相关文章:

  • 我们学会在具体情境中做出恰当判断
  • 分布式结构化存储系统-HBase访问方式
  • 【Azure APIM】自建网关(self-host gateway)收集请求的Header和Body内容到日志中的办法
  • 冬天快乐
  • pycharm跑python项目易出错的困难
  • 双端队列的0-1BFS
  • Python psycopg2 类库使用学习总结
  • 多后端服务器架构解析 - 教程
  • 24NOIP游记——彼时彼刻
  • PWN手的成长之路-15-jarvisoj_level2_x64
  • 价值博弈场的工程实现:构建数字文明的价值免疫系统——声明Ai生成
  • 2025年两联供室内机厂家最新权威推荐榜:技术实力与市场口碑
  • 2025铝合金微弧氧化厂家权威推荐榜:表面处理技术实力深度解
  • 2025杉木木方厂家最新权威推荐榜:优质木材与稳定供应口碑之
  • 2025年厂房保养厂家最新权威推荐榜:专业维护与成本控制优选
  • 详细介绍:基于微信小程序的智能在线预约挂号系统【2026最新】
  • 2025中医师承权威推荐榜:名师带徒与临床实践深度解析
  • 2025液压无损扒胎机厂家权威推荐榜:高效无损与耐用性能深度
  • 在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
  • [转] 基于ubuntu-base进行根文件系统的修改与打包
  • jquery 字符串转数字
  • B -识别浮点常量问题
  • 小C语言--词法分析程序-A
  • IS-IS核心解析:驱动现代网络的隐形力量 - 教程
  • 梳理一下Java中为保证线程安全提供了那些方案 - 浪矢
  • 处理Git错误:“invalid object [hash]”和“unable to read tree [hash]”
  • raspberry + pycharm failed
  • 基于OpenEuler--docker容器化部署ceph集群 - 实践
  • 2025年新型振动电机厂家权威推荐榜:创新技术与高效性能深度
  • 2025钢衬塑储罐厂家最新权威推荐榜:耐腐性能与结构强度双优