#z65. ST复习
ST复习
1. ST 表(稀疏表)主要用于解决哪种问题?
{{ select(1) }}
- [选项1] 动态区间查询
- [选项2] 静态区间最大值 / 最小值查询
- [选项3] 图的最短路径
- [选项4] 排序优化
2. ST 表预处理的时间复杂度是?
{{ select(2) }}
- [选项1] O (n)
- [选项2] O(n log n)
- [选项3] O(n²)
- [选项4] O(log n)
3. ST 表查询区间最小值的时间复杂度是?
{{ select(3) }}
- [选项1] O (1)
- [选项2] O(log n)
- [选项3] O(n)
- [选项4] O(√n)
4. 定义 ST 表数组st[i][j]时,j通常表示?
{{ select(4) }}
- [选项1] 区间长度为 2^j
- [选项2] 区间左端点
- [选项3] 区间右端点
- [选项4] 查询次数
5. 预处理 ST 表时,通常使用哪种递推关系?
{{ select(5) }}
- [选项1] st[i][j] = min(st[i][j-1], st[i+2^(j-1)][j-1])
- [选项2] st[i][j] = min(st[i-1][j], st[i][j-1])
- [选项3] st[i][j] = min(st[i][j+1], st[i+1][j])
- [选项4] st[i][j] = min(st[i-2^(j-1)][j-1], st[i][j-1])
6. 以下哪项是 ST 表的局限性?
{{ select(6) }}
- [选项1] 只能处理加法运算
- [选项2] 不支持动态更新
- [选项3] 空间复杂度高
- [选项4] 仅适用于整数数据
7. 计算区间长度为len的 ST 表查询时,k值通常取?
{{ select(7) }}
- [选项1] log₂(len)
- [选项2] log₂(len) 向下取整
- [选项3] log₂(len) 向上取整
- [选项4] len / 2
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m;
int a[20][100005];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[0][i]);
}
int len = log2(n) + 1;
for(int i=1;i<=len;i++){
for(int j=1;j<=n-(1<<i)+1;j++){
a[i][j]=max(a[i-1][j],a[i-1][j+(1<<(i-1))]);
}
}
while(m--){
int x,y;
scanf("%d%d",&x,&y);
int len = log2(y-x+1);
printf("%d\n",max(a[len][x],a[len][y-(1<<len)+1]));
}
return 0;
}
8. 代码中数组a[i][j]的含义是?
{{ select(8) }}
- [选项1] 从位置j开始,长度为2^i的区间最小值
- [选项2] 从位置j开始,长度为2^i的区间最大值
- [选项3] 从位置j开始,长度为i的区间最大值
- [选项4] 从位置j开始,长度为2^i的区间和
9. 预处理 ST 表的循环中,n-(1<<i)+1的作用是?
{{ select(9) }}
- [选项1] 防止数组越界
- [选项2] 减少不必要的计算
- [选项3] 优化空间复杂度
- [选项4] 确保区间长度不超过n
10. 查询时y-(1<<len)+1计算的是?
{{ select(10) }}
- [选项1] 左端点位置
- [选项2] 右端点位置
- [选项3] 第二个区间的起始位置
- [选项4] 区间长度
11. 代码中使用scanf而非cin的主要原因是?
{{ select(11) }}
- [选项1] 代码风格偏好
- [选项2] 减少内存占用
- [选项3] 提高输入效率
- [选项4] 避免类型错误
12. 预处理时len = log2(n) + 1的目的是?
{{ select(12) }}
- [选项1] 确定 ST 表的层数
- [选项2] 计算最大区间长度
- [选项3] 优化空间使用
- [选项4] 避免递归过深
13. 若输入数据全为负数,代码会?
{{ select(13) }}
- [选项1] 无法正确处理
- [选项2] 返回错误结果
- [选项3] 正常工作
- [选项4] 触发运行时错误
14. 代码中1<<i的作用是?
{{ select(14) }}
- [选项1] 计算 2 的 i 次方
- [选项2] 快速乘 2
- [选项3] 位运算优化
- [选项4] 生成掩码