ST表封装
2026-08-12 13:27:50
发布于:浙江
主要写ST封装的定义和调用以及应用范围
定义:
//这里值写区间最大值和最小值,其他的逻辑基本相同
struct STMAX{
int f[N][21+1];
void intit(int n){
for(int j=1;j<=21;j++)
for(int i=1;i+(1<<j)-1<=n;i++)
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
int query(int l,int r){
int s=__lg(r-l+1);
return max(f[l][s],f[r-(1<<s)+1][s]);
}
};//区间最大值示例
struct STMIN{
int f[N][21+1];
void intit(int n){
for(int j=1;j<=21;j++)
for(int i=1;i+(1<<j)-1<=n;i++)
f[i][j]=min(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
int query(int l,int r){
int s=__lg(r-l+1);
return min(f[l][s],f[r-(1<<s)+1][s]);
}
};//区间最小值示例
STMAX amax;//定义结构体数组
STMIN amin;
调用结构体:
amax.init(n);
cout<<amax.query(l,r);
amin.init(n);
cout<<amin.query(l,r);
范围:
| 运算 |
|---|
| 区间最小值 |
| 区间最大值 |
| 区间最大公约数 |
| 区间按位与 |
| 区间按位或 |
全部评论 4
纠正
第4和第16行 写成大写了还有 写成 了
2026-08-12 来自 浙江
2第6第18行少了个
2026-08-12 来自 浙江
2可以改内容
2026-08-12 来自 上海
0懒得改了
2026-08-12 来自 浙江
2
我咋不会 ST 表
2026-08-12 来自 浙江
1推荐你写一下这道题目
2026-08-21 来自 上海
0老师你这是在推销吗🤔
2026-08-21 来自 上海
0
嘘~....
2026-08-21 来自 上海
0老师有没有线段树好题推荐
2026-08-21 来自 上海
0
智齿
2026-08-13 来自 浙江
0



























有帮助,赞一个