倍增法(ST算法)

编程入门 行业动态 更新时间:2024-10-10 11:19:40

倍增法(ST<a href=https://www.elefans.com/category/jswz/34/1770096.html style=算法)"/>

倍增法(ST算法)

文章目录

  • 倍增法(ST算法)
    • 1.算法描述
    • 2.模板
      • 2.1 预处理
      • 2.2 询问
    • 3.典型例题

倍增法(ST算法)

1.算法描述

算法思想

st算法,适用于RMQ问题(区间最大值),也就是求出一个序列中,数值最大的一项。朴素做法自然是一遍扫描找最大值,但是当题目询问次数很多的时候,就很有可能超时,因此用倍增算法来进行一个优化。

以下是st算法求解RMQ问题的实现:

首先,我们用 f [ i ] [ j ] f[i][j] f[i][j]来表示在序列a中,第i位数字以后数 2 j 2^j 2j个数之中的最大值,那么就可以得到 f [ i ] [ 0 ] = a [ i ] f[i][0]=a[i] f[i][0]=a[i]。

接下来进行一个DP的过程:

for (int j = 1; j <= (log2(n)); j++)for (int i = 1; i <= n - (1 << j) + 1; i++)f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);

2.模板

2.1 预处理

// 预处理
void pre_work() {for (int i = 1; i <= n; ++i) f[i][0] = a[i];  // 处理长度为1的区间int t = log(n) / log(2) + 1;                  // 计算分段数for (

更多推荐

倍增法(ST算法)

本文发布于:2024-02-06 18:41:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1751021.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:算法   ST

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!