ST算法详解

Coded by Jelly_Goat.
All rights reserved.

这个主要是说ST表的。

首先了解一下ST表是什么。


先来一个老套的情景带入。

(假设所有的题目都是1s,128ms)

有一天,蒟蒻Jelly_Goat用手(?)

给你出了一套\(n<=1000\)的数据,然后让你输出\(m<=1000\)次最小值。

你说了,那不就直接暴力吗?

然后,蒟蒻Jelly不服,又开始用C++出了\(n<=10000\),\(m<=10000\)的数据。

你可能开始疑惑了,那我就线段树吧。

蒟蒻Jelly_Goat非得要卡住你,给你又用python3出了一套\(n<=200000\),\(m<=300000\)的数据。

你说,我还会树状数组然后卡一卡常就过了。

事实上你最后几个测试点已经TLE的一声哭了出来。

于是Jelly不死心,又来了一套\(n<=200000\),\(m<=1000000\)的数据。

你摊一摊手,这可咋整?猫树

于是你发现这个题目,蒟蒻Jelly_Goat并没有在线询问。

于是主角,ST表,登场了。


定义

ST表,又名稀疏表,是一种静态提供\(O(1)\)询问的数据结构。

但是建立这个数据结构的实质是dp倍增思想的结合。

ST表的特性:

st[i][j]表示区间\([i,i+(2^j)-1]\)的M(Max or Min)。

然后我们从特性逆推分析:

既然st[i][j]表示的是上面的含义,那么...\(st[i][j]=M(st[i][j-1],st[i+2^{j-1}][j-1])\),

即劈成两半的原先的区间\(st[i][j-1],st[i+2^{j-1}][j-1]\)是可以推出st[i][j]的。

于是我们现在会明白,为什么st表是dp实现

我们从区间长度=0,即只有一个数的区间推到长度为\(2^{Log2[n]}\)的就可以。

然后因为我们是利用了两个加倍到了一个,所以这是倍增思想

代码已经开源,地址:transport

ST算法详解的更多相关文章

  1. 【原创】RMQ - ST算法详解

    ST算法: ID数组下标: 1   2   3   4   5   6   7   8   9    ID数组元素: 5   7   3   1   4   8   2   9   8 1.ST算法作 ...

  2. BM算法  Boyer-Moore高质量实现代码详解与算法详解

    Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...

  3. kmp算法详解

    转自:http://blog.csdn.net/ddupd/article/details/19899263 KMP算法详解 KMP算法简介: KMP算法是一种高效的字符串匹配算法,关于字符串匹配最简 ...

  4. 机器学习经典算法详解及Python实现--基于SMO的SVM分类器

    原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector  ...

  5. [转] KMP算法详解

    转载自:http://www.matrix67.com/blog/archives/115 KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段.    我们这里说的K ...

  6. 【转】AC算法详解

    原文转自:http://blog.csdn.net/joylnwang/article/details/6793192 AC算法是Alfred V.Aho(<编译原理>(龙书)的作者),和 ...

  7. KMP算法详解(转自中学生OI写的。。ORZ!)

    KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法.KMP算法是拿来处理字符串匹配的.换句 ...

  8. EM算法详解

    EM算法详解 1 极大似然估计 假设有如图1的X所示的抽取的n个学生某门课程的成绩,又知学生的成绩符合高斯分布f(x|μ,σ2),求学生的成绩最符合哪种高斯分布,即μ和σ2最优值是什么? 图1 学生成 ...

  9. Tarjan算法详解

    Tarjan算法详解 今天偶然发现了这个算法,看了好久,终于明白了一些表层的知识....在这里和大家分享一下... Tarjan算法是一个求解极大强联通子图的算法,相信这些东西大家都在网络上百度过了, ...

随机推荐

  1. Android解决Intent中的数据重复问题

    转载地址:http://www.cnblogs.com/anrainie/articles/2383941.html 最近在研究Android,遇到了一些Notification(通知)的问题: .N ...

  2. 20155333 《网络对抗》 Exp9 Web安全基础

    20155333 <网络对抗> Exp9 Web安全基础 基础问题回答 1.SQL注入攻击原理,如何防御? 原理: 通过在用户名.密码登输入框中输入一些',--,#等特殊字符,实现引号闭合 ...

  3. POJ1159

    这竟然是IOI虽然是2000年的,但其实也改变不了它水题的本质 我写了两种方法,这里都讲一下吧 考虑记忆化搜索,用f[i][j]表示当区间的左端为i,右端为j时最少要添加多少字符,所以ans就为f[1 ...

  4. ubuntu下安装搜狗输入法

    1.如果系统中未安装依赖fcitx,libssh2-1,或者依赖fcitx,libssh2-1的版本低的话,则需提前安装或者升级,否则安装输入法时会出错 安装命令 sudo apt-get insta ...

  5. 巧用ios朗读kindle图书

    想必大家都有想过kindle出中文的有声阅读刊物吧? 今天突发奇想想到一招能够让我们听自己拿kindle买的中文图书.当然这是有条件的. 前提是你得有一个ios设备,不管是iphone还是ipad,i ...

  6. BCompare破解方法

    1.删除 BCUnrar.dll 文件,重启软件. 备注:使用everything搜索BCUnrar.dll

  7. allegro 基本步骤

    PCB 1.建立电路板 首先是打开PCB编辑器——开始--所有程序-- Allegro SPB 15.5--PCB Editor,在弹出的对话框中选择Allegro PCB Design 610(PC ...

  8. Anibei前端基础学习

    html.html5.CSS2.CSS3.JQuery.Vue.js学习,后端程序媛开始学习前端开发啦.

  9. 【Unity Shader】从NDC(归一化的设备坐标)坐标转换到世界坐标的数学原理

    从NDC(归一化的设备坐标)坐标转换到世界坐标要点 参考资料 How to go from device coordinates back to worldspace http://feepingcr ...

  10. 32bit 天堂2脚本修改资料大全【客户端+服务端】

    该资料夹中所有教程资料全部适合天堂2初章32位服务端的脚本修改,已经1.2章相关客户端的修改. https://pan.baidu.com/s/1RuGMFNgERd2JMYQpdceQwg 提取码: ...