当前位置: 首页 > 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.hskmm.com/?act=detail&tid=29421

相关文章:

  • 我们学会在具体情境中做出恰当判断
  • 编译安装nginx
  • AutoGCL——AutoGCL: automated graph contrastive learning via learnable view generators
  • 【教程】无需第三方应用,Windows自带邮箱如何绑定QQ邮箱等第三方邮箱
  • 2025婚纱摄影影楼权威推荐榜:专业团队与创意拍摄打造梦幻婚礼
  • 为什么40岁后的快乐消失了
  • 分布式结构化存储系统-HBase访问方式
  • 【Azure APIM】自建网关(self-host gateway)收集请求的Header和Body内容到日志中的办法
  • [JAVA]JDK多版本设置
  • Google Veo3生成跳舞视频
  • 【PolarCTF】stackof
  • 新生赛 F,H,J 题解
  • pycharm跑python项目易出错的困难
  • 双端队列的0-1BFS
  • Python psycopg2 类库使用学习总结
  • [GenAI] RAG架构演进
  • 24NOIP游记——彼时彼刻
  • 嵌入式-C++面经1
  • 合并区间 - MKT
  • 如何防止员工向第三方 AI 泄露数据?滤海 AI DLP 全方位技术防护方案解析
  • 20232322 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • 实验1 现代c++编程初体验
  • 冬天快乐
  • P2441M 见过的 tricks
  • 企业大数据战略定位
  • OpenAI加码个性化消费AI技术布局
  • 线性回归 C++ 实现
  • 内存分区
  • Spring Data JPA学习笔记
  • P1112 波浪数 题解