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. c语言gets()函数与它的替代者fgets()函数

    在c语言中读取字符串有多种方法,比如scanf() 配合%s使用,但是这种方法只能获取一个单词,即遇到空格等空字符就会返回.如果要读取一行字符串,比如: I love BIT 这种情况,scanf() ...

  2. redis系列--你真的入门了吗?redis4.0入门~

    前言 redis作为nosql家族中非常热门的一员,也是被大型互联网公司所青睐,无论你是开发.测试或者运维,学习掌握它总会为你的职业生涯增色添彩. 当然,你或多或少已经了解redis,但是你是否了解其 ...

  3. Exp5:MSF基础应用

    Exp5:MSF基础应用 一.基础问题回答 (1)用自己的话解释什么是 exploit , payload , encode. exploit: 设相当于利用漏洞偷偷打开的管道,将做好的木马病毒等顺利 ...

  4. 20155306 白皎 0day漏洞——漏洞利用原理之DEP

    20155306 白皎 0day漏洞--漏洞利用原理之DEP 一.DEP机制的保护原理 1.为什么出现DEP? 溢出攻击的根源在于现代计算机对数据和代码没有明确区分这一先天缺陷,就目前来看重新去设计计 ...

  5. 20155333 《网络对抗》 Exp5 MSF基础应用

    20155333 <网络对抗> Exp5 MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode exploit:攻击手段,是能使攻击武器(payl ...

  6. 【php增删改查实例】第七节 - 部门管理模块(画一个datagrid表格)

    在easyui中,datagrid组件需要用一个table标签去渲染. <table id="grid0" title="部门管理" class=&quo ...

  7. 汇编 REPE/REPZ 指令,CMPSB指令

    知识点: REPE/REPZ 指令 CMPSB 指令 一.CMPSB //cmp //sub //SCASB//scasw//scasd cmp byte ptr [edi],al //对标志位的 ...

  8. python 网络爬虫介绍

    一.网络爬虫相关概念 网络爬虫介绍 我们都知道,当前我们所处的时代是大数据的时代,在大数据时代,要进行数据分析,首先要有数据源,而学习爬虫,可以让我们获取更多的数据源,并且这些数据源可以按我们的目的进 ...

  9. 2、Docker镜像和镜像管理

    一.镜像介绍 1.定义 一个只读层被称为镜像,一个镜像是永久不会变的. 由于 Docker 使用一个统一文件系统,Docker 进程认为整个文件系统是以读写方式挂载的. 但是所有的变更都发生顶层的可写 ...

  10. 【原】Github+Hexo+NextT搭建个人博客【1】

    该系列博客列表请访问:http://www.cnblogs.com/penglei-it/category/934299.html 摘要 GitHub 是一个开源项目的托管网站,相信很多人都听过.在上 ...