AcWing 算法提高课 RMQ(区间最值查询) st表
RMQ 又叫 st表 跳表
本质是倍增动态规划
查询的时候,每次查询使用一个最大的k,使得2^k<=len(r-l+1)
然后找到[l, r]区间中前2^k和后2^k中的最大值,取最大
模板:

const int N=200010; const int M=18;//2^M>200010 int n,m; int nums[N]; int st[N][M]; void Init() { for(int j=0;j<M;j++)//区间长度 { for(int i=1;i+(1<<j)-1<=n;i++)//区间左端点 { if(j==0) st[i][j]=nums[i]; else st[i][j]=max(st[i][j-1],st[i+(1<<( j-1))][j-1]); } } } int Query(int l,int r) { int len=r-l+1; int k=log(len)/log(2);//log2(len)得到len对应查询的j长度 return max(st[l][k],st[r-(1<<k)+1][k]); } void YD() { cin>>n; fore(i,1,n) cin>>nums[i]; Init(); cin>>m; fore(i,1,m) { int l,r;cin>>l>>r; cout<<Query(l,r)<<endl; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人