st表
1.理解
st表是用来解决区间RMQ问题,简而言之就是求区间最值问题。
1.d数组表示的含义是什么呢?d[i] [j]表示的是区间[i,i+j^2-1]区间的最大值
2.那如何求的一个区间的最大值呢,利用的是dp思想,比如[5,10]这段区间的最大值,他就会求r-l+1最接近的二次幂。这段区间长度是6,所以与他最接近的因该是4,那这段区间的最值[5,8]和[7,10].这是咋求出来的呢?就是利用最大的二次幂,5的区间长度往后延长4个,10的区间长度往前减少四个,无论如何两个区间都会有交集,而且保了只求[5,10]这个区间。
3.最后总结就是求[l,r]区间最值的公式就是
k=log(r−l+1)//这是于区间长度最接近的二次幂
然后左右端点分别往中间走2^k个距离。
max(d[l][k],d[r−(1<<k)+1][k])
2.模板
#include<bits/stdc++.h>
using namespace std;
#define fel(i,x,y) for(int i=x;i<=y;i++)
#define fhl(i,x,y) for(int i=x;i>=y;i--)
#define pb push_back
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define inf 0x3fffffff
#define endl "\n"
typedef pair<int,int> PII;
#define ll long long
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具