初识 ST 表
推荐博客 : https://blog.csdn.net/BerryKanry/article/details/70177006
ST表通常用于RMQ问题中,询问某个区间的最值这类问题中
ST表的核心部分就是 st[i][j] ,表示以 i 为起点跳跃 2^j 所经路径的最值。
更新的时候利用dp的思想
代码示例 :
void init(){
LOG[0] = -1;
for(int i = 1; i <= 100000; i++) LOG[i] = LOG[i/2]+1;
for(int i = 1; i <= LOG[n]; i++){
for(int j = 1; j+(1<<i)-1 <= n; j++){
st[j][i] = max(st[j][i-1], st[j+(1<<(i-1))][i-1]);
}
}
}
至于查询是可以O(1)实现的

int ans = max(st[a][k], st[b-(1<<k)+1][k]);
还有关于求每个数的对数的LOG数组也是个重点,在上面
int st[maxn][20]; // 最大值为例
int n;
int LOG[maxn]; void init(){
LOG[0] = -1;
for(int i = 1; i <= 100000; i++) LOG[i] = LOG[i/2]+1; for(int i = 1; i <= LOG[n]; i++){
for(int j = 1; j+(1<<i)-1 <= n; j++){
st[j][i] = max(st[j][i-1], st[j+(1<<(i-1))][i-1]);
}
}
} int main() {
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout); cin >> n;
for(int i = 1; i <= n; i++){
scanf("%d", &st[i][0]);
}
init();
//for(int i = 1; i <= n; i++){
//for(int j = 0; j <= LOG[n]; j++){
//printf("%d ", st[i][j]);
//}
//printf("\n");
//}
int m, a, b; // m个查询
cin >> m;
for(int i = 1; i <= m; i++){
scanf("%d%d", &a, &b); int k = LOG[b-a+1]
int ans = max(st[a][k], st[b-(1<<k)+1][k]);
printf("%d\n", ans);
}
return 0;
}
初识 ST 表的更多相关文章
- POJ3693 Maximum repetition substring [后缀数组 ST表]
Maximum repetition substring Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9458 Acc ...
- 【BZOJ-2006】超级钢琴 ST表 + 堆 (一类经典问题)
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2473 Solved: 1211[Submit][Statu ...
- 【BZOJ-3956】Count ST表 + 单调栈
3956: Count Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 173 Solved: 99[Submit][Status][Discuss] ...
- 【BZOJ-4569】萌萌哒 ST表 + 并查集
4569: [Scoi2016]萌萌哒 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 459 Solved: 209[Submit][Status] ...
- 【BZOJ-4310】跳蚤 后缀数组 + ST表 + 二分
4310: 跳蚤 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 180 Solved: 83[Submit][Status][Discuss] De ...
- HDU5726 GCD(二分 + ST表)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5726 Description Give you a sequence of N(N≤100, ...
- Hdu 5289-Assignment 贪心,ST表
题目: http://acm.hdu.edu.cn/showproblem.php?pid=5289 Assignment Time Limit: 4000/2000 MS (Java/Others) ...
- Bzoj 2006: [NOI2010]超级钢琴 堆,ST表
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2222 Solved: 1082[Submit][Statu ...
- ST表poj3264
/* ST表多次查询区间最小值 设 g[j][i] 表示从第 i 个数到第 i + 2 ^ j - 1 个数之间的最小值 类似DP的说 ans[i][j]=min (ans[i][mid],ans ...
随机推荐
- 4-10 items设计
1,items相当于dict,但是又比字典好 2,parse.urljoin(response.url,post_url)方法,其中image_url是一个域名的话,其中的当前域名就不用再添加. yi ...
- python基础五之字典
python数据的可变性 通过数据的可变性,可将数据分为可变数据类型和不可变数据类型. 可变数据类型:list,dict (不可哈希) 不可变数据类型:元祖,bool,int,str (可哈希) py ...
- CF241B Friends
CF241B Friends 和Tree and Xor思路一样CF1055F Tree and XOR 直接找到第k大val,可以直接建出trie,然后按位贪心 考虑比val大的数的和 还是用b[i ...
- 基于小米即时消息云服务(MIMC)的Web IM
michat 一个基于小米即时消息云服务(MIMC)的Web IM. 源码地址github和gitee同步. 截图展示 如何使用 请先双击目录"需要安装的jars"的install ...
- Linux 旗标实现
Linux 内核提供了一个遵守上面语义的旗标实现, 尽管术语有些不同. 为使用旗标, 内核 代码必须包含 <asm/semaphore.h>. 相关的类型是 struct semaphor ...
- 微信小程序之在线答题(2)
Tips:前端进阶的概念一直比较模糊,我们往往以掌握知识的多少来划分初级中级和高级,但这并不全面,谁都不能保证自己掌握的知识是最全最好的,尤其在前端工程师这个职业,每天都是日新月异. 所以,我认为要分 ...
- Echarts构建图表
Echarts学习-构建图表 相信有很多的前端开发人员在开发Echarts图表的过程中都遇到对图表结构过无从下手,面对一大堆的专业词汇一脸懵逼的样子,在经过了一段时间的踩坑后,终于摸索出了一套完善的学 ...
- vue-learning:34 - component - 内置组件 - 缓存组件keep-alive
vue内置缓存组件keep-alive <keep-alive>标签内包裹的组件切换时会缓存组件实例,而不是销毁它们.避免多次加载相应的组件,减少性能消耗.并且当组件在 <keep- ...
- jquery自己写的带左右箭头自动播放幻灯插件,简化
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- CodeForces - 922D Robot Vacuum Cleaner (贪心)
Pushok the dog has been chasing Imp for a few hours already. Fortunately, Imp knows that Pushok is a ...