当前位置: 首页 > 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.jsqmd.com/news/12233/

相关文章:

  • 我们学会在具体情境中做出恰当判断
  • 【教程】无需第三方应用,Windows自带邮箱如何绑定QQ邮箱等第三方邮箱
  • ubuntu默认桌面解决vnc灰屏
  • 2025婚纱摄影影楼权威推荐榜:专业团队与创意拍摄打造梦幻婚礼
  • 分布式结构化存储系统-HBase访问方式
  • 智能(embodied AI)、机器人视觉 + 交互、边缘 AI
  • 【PolarCTF】stackof
  • 我们离“科幻”还有多远?Yoshua Bengio_From System 1 Deep Learning to System 2 Deep Learning_NeurIPS 2019 感想
  • C# console get current screen DPI from user32.dll and gdi32.dll
  • 冬天快乐
  • 双端队列的0-1BFS
  • Python psycopg2 类库使用学习总结
  • [GenAI] RAG架构演进
  • 多后端服务器架构解析 - 教程
  • PWN手的成长之路-15-jarvisoj_level2_x64
  • 2025.10.12——1绿
  • 价值博弈场的工程实现:构建数字文明的价值免疫系统——声明Ai生成
  • 基于 Rust 的英文数字验证码识别系统设计与实现
  • 2025年两联供室内机厂家最新权威推荐榜:技术实力与市场口碑
  • 2025武汉商铺装修防水厂家最新权威推荐榜:专业施工与品质保
  • 2025铝合金微弧氧化厂家权威推荐榜:表面处理技术实力深度解
  • 2025杉木木方厂家最新权威推荐榜:优质木材与稳定供应口碑之
  • 2025年厂房保养厂家最新权威推荐榜:专业维护与成本控制优选
  • 使用C语言实现重写stm32的启动文件
  • LeetCode 387 字符串中的第一个唯一字符 Swift 题解:用哈希表快速定位不重复字符 - 指南
  • 详细介绍:基于微信小程序的智能在线预约挂号系统【2026最新】
  • 让我们开始 CSS 的学习之旅
  • 2025液压无损扒胎机厂家权威推荐榜:高效无损与耐用性能深度
  • Linux环境下的UDEV机制及其与守护进程的关联
  • 在Red Hat Enterprise Linux 9上使用Docker快速安装并部署