zoukankan      html  css  js  c++  java
  • ST表学习

    啊谈不上学习了。复习一下原理留一下板子。

    $fleft[i,j ight]$表示以$i$为起点,区间长度为${2}^{j}$的区间最值。以最小值为例,

    $minleft(aleft [ k ight ] | ileq kleq i+2^{j}-1 ight)$

    递推式就是倍增思想,为均分的两段区间的最值。即

    $minleft(fleft[i,j-1 ight],fleft[i+2^{j-1},j-1 ight ] ight)$

    预处理复杂度$Oleft(nlog_{2}n ight )$

    如果询问$L$到$R$区间的最值,它等于两段覆盖它的区间的$min$,即

    $minleft(fleft[l,k ight],fleft[r-2^{k}+1,k ight] ight),k=log_{2}left(R-L+1 ight)$

    求解的时候是$Oleft(1 ight )$回答的。

    我用了全篇$LaTeX$公式,好无聊啊。。。。

    板子

    int f[N][20],p[20];
    void ST(){
        p[0]=1;
        for(int i=1;i<=18;i++)
        p[i]=p[i-1]<<1;
        for(int i=1;i<=n;i++)
        f[i][0]=x[i];
        for(int j=1;j<=18;j++)
        for(int i=1;i+(1<<j)-1<=n;i++)
        f[i][j]=max(f[i][j-1],f[i+p[j-1]][j-1]);
    }
  • 相关阅读:
    mangodb学习0.1 概念
    express 学习笔记(一)路由
    vue配置路由
    screenX, clientX, pageX
    svg的世界、视窗、视野
    window.print()打印网页(一)
    cookie基础
    BOM基础
    Java三大特征:封装 继承 多态
    面向对象
  • 原文地址:https://www.cnblogs.com/orzzz/p/7717697.html
Copyright © 2011-2022 走看看