首页 > 其他分享 >ST表

ST表

时间:2024-08-30 16:48:19浏览次数:7  
标签:int kMaxN times 逆运算 ST 最值

ST表可以在静态空间中 \(O(log)\) 查询最值,但需要 \(O(nlogn)\)初始化。

前缀和皆知尽人需要可逆性,\(+\) 的逆运算 为 \(-\), $\times $ 的逆运算为 \({\div}\)(非0), ^的逆运算为 ^本身, 但\(max\) \(min\),不具有逆运算。

所以ST表粉墨登场(

SL表利用的是倍增思想。任何一个数均可以写成 \(a_1 \times 2^0 + a_2 \times 2^1 + \dots + a_k \times 2^{k - 1}\),就可以把最值用其拼接。

求取答案的部分相对简单,分解后在求值。也有简单办法,因为最值重合不影响,即可使用 cmath 中的 \(log2(x)\) 找到 \(\le x\) 的最大2的幂。

现在问题来到如何预处理。定义 \(f_{ji}\),表示跨度和起点,当然跨度是 \(2^j\)。每次转移就是之前两端拼起来$ f[j][i] = max(f[j][i - 1], f[j + (1 << (i - 1))][i - 1]);$

#include <cmath>
#include <iostream>

using namespace std;

const int kMaxN = 1e5 + 5;

int n, m, a[kMaxN], f[kMaxN][30];

int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    f[i][0] = a[i];
  }
  for (int i = 1; (1 << i) <= n; i++) {            // 跨度
    for (int j = 1; j + (1 << i) - 1 <= n; j++) {  // 起点
      f[j][i] = max(f[j][i - 1], f[j + (1 << (i - 1))][i - 1]);
    }
  }
  for (int i = 1, l, r; i <= m; i++) {
    cin >> l >> r;
    int u = log2(r - l + 1);
    cout << max(f[l][u], f[r - (1 << u) + 1][u]) << '\n';;
  }
  return 0;
}

标签:int,kMaxN,times,逆运算,ST,最值
From: https://www.cnblogs.com/JiCanDuck/p/18389051

相关文章

  • Istio 基于头部分流
    分离部署istio下面的示例把数据平面和控制平面分开部署。自动生成配置文件可以istioctlprofiledumpempty加上配置文档然后进行修改。生产集群注意配置资源限制。apiVersion:install.istio.io/v1alpha1kind:IstioOperatormetadata:name:control-planespec:prof......
  • 医疗系统医院如何选择静态转换开关(STS)
    医院作为一个重要的公共场所,对供电的连续性和稳定性要求非常高。在医院中,有许多敏感负荷,如MR、CT、各类分析仪、麻醉机、手术监护仪等。当出现电压波动或供电故障时,将严重影响医疗设备的安全运行,严重时会造成人员伤亡。为了保障供电的连续性,可以通过双电源冗余配置的方式,提高敏感......
  • [WPF]数据绑定时为何会出现StringFormat失效2T
    在数据绑定过程中,我们经常会使用StringFormat对要显示的数据进行格式化,以便获得更为直观的展示效果,但在某些情况下格式化操作并未生效,例如Button的Content属性以及ToolTip属性绑定数据进行StringFormat时是无效的。首先回顾一下StringFormat的基本用法。StringFormat的用法Str......
  • HarmonyOS开发指南:ArkUI自定义Toast弹窗样式规范
     可以通过使用自定义弹窗和定时器达到类似Toast的效果。场景一:自定义弹窗实现弹窗中加入icon和文字,支持Button。方案:⦁   使用@CustomDialog装饰器装饰自定义弹窗,在此装饰器内进行自定义内容(也就是弹框内容)、并创建构造器,与装饰器呼应相连。⦁   使用定时器,在页面......
  • Pydantic 详解:FastAPI 中的数据验证神器
    FastAPI是一个现代的、快速的Web框架,用于构建API。它基于ASGI(AsynchronousServerGatewayInterface),这使得FastAPI能够支持异步请求处理,从而提供高性能的Web服务。FastAPI利用Python类型提示来增强开发体验,通过类型提示进行自动的数据验证和自动文档生成。Py......
  • [WPF]数据绑定时为何会出现StringFormat失效VPqCe7cCvg7iTH0g
    在数据绑定过程中,我们经常会使用StringFormat对要显示的数据进行格式化,以便获得更为直观的展示效果,但在某些情况下格式化操作并未生效,例如Button的Content属性以及ToolTip属性绑定数据进行StringFormat时是无效的。首先回顾一下StringFormat的基本用法。StringFormat的用法Str......
  • The 3rd Universal Cup. Stage 7- Warsaw
    B.MissingBoundaries给\(N\)个区间,可能存在一些区间的端点不确定。现在你要指定区间的端点,是否可以使得所有不重不漏的覆盖\([1,L]\)首先考虑两个端点都确定的区间,两两之间应该不相交。考虑只有一个端点的区间,对于已经被确定的点,一定不能是在已被覆盖的区间内。其次所有的......
  • springboot 接口接收参数的注解介绍(@RequestParam,@PathVariable,@RequestBody 等)
    springboot接收参数的注解介绍(使用方法)在SpringBoot中,接收参数的方式主要依赖于SpringMVC提供的注解。这些注解帮助你将HTTP请求中的参数绑定到控制器(Controller)方法的参数上。以下是一些常用的接收参数的注解:1.@RequestParam用法:用于将HTTP请求参数绑定到控制器的方......
  • CF891E Lust 题解
    题目链接点击打开链接题目解法会不了\(egf\)/ll我们把贡献变成\(\prod\limits_{j\neqi}a_j=\prod\limits_{j=1}^na_j-\prod\limits_{j=1}^n(a_i-[i=j])\)即答案为一开始的乘积\(-\)\(k\)次操作之后所有数乘积的期望因为有顺序,所以用\(egf\)的形式表示最后乘积的期......
  • WPF ItemsControl IsItemsHost true
    //customziecontrol//xaml<UserControlx:Class="WpfApp306.ElpTbk"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"......