当前位置: 首页 > news >正文

ST 表

ST 表

用于解决区间可重复贡献问题,需要满足 \(x \text{ 运算符 } x=x\) (如区间最大值:\(\max(x,x)=x\) 、区间 \(\gcd\)\(\gcd(x,x)=x\) 等),但是不支持修改操作。\(\mathcal O(N\log N)\) 预处理,\(\mathcal O(1)\) 查询。

struct ST {const int n, k;vector<int> in1, in2;vector<vector<int>> Max, Min;ST(int n) : n(n), in1(n + 1), in2(n + 1), k(__lg(n)) {Max.resize(k + 1, vector<int>(n + 1));Min.resize(k + 1, vector<int>(n + 1));}void init() {for (int i = 1; i <= n; i++) {Max[0][i] = in1[i];Min[0][i] = in2[i];}for (int i = 0, t = 1; i < k; i++, t <<= 1) {const int T = n - (t << 1) + 1;for (int j = 1; j <= T; j++) {Max[i + 1][j] = max(Max[i][j], Max[i][j + t]);Min[i + 1][j] = min(Min[i][j], Min[i][j + t]);}}}int getMax(int l, int r) {if (l > r) {swap(l, r);}int k = __lg(r - l + 1);return max(Max[k][l], Max[k][r - (1 << k) + 1]);}int getMin(int l, int r) {if (l > r) {swap(l, r);}int k = __lg(r - l + 1);return min(Min[k][l], Min[k][r - (1 << k) + 1]);}
};
http://www.hskmm.com/?act=detail&tid=38044

相关文章:

  • 小波矩阵树:高效静态区间第 K 大查询
  • Seata用法
  • 分数运算类
  • 撸一个功能强大的基于语义的图像检索系统
  • 提交一张 PPT,参与 RTE2025 全球语音智能体云展示
  • 解释 EIP-4337
  • 数论常见结论及例题
  • 求解连续数字的正约数集合——倍数法
  • git回滚代码
  • 组合数
  • q
  • 裴蜀定理
  • 逆元
  • 扩展欧几里得 exgcd
  • 离散对数 bsgs 与 exbsgs
  • 常见数列
  • 20232314 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 【LTDC】LTDC 简介
  • 分类器案例 - -一叶知秋
  • Markdown数学公式 - -一叶知秋
  • 最大流
  • 最小割树 Gomory-Hu Tree
  • 最小割
  • 差分约束
  • 图论常见结论及例题
  • 最长路(topsort+DP算法)
  • 二分图最大匹配
  • 最短路径树(SPT问题)
  • 欧拉路径/欧拉回路 Hierholzers
  • 无源汇点的最小割问题 Stoer–Wagner