• ST表


    (O(n log n))预处理,(O(1))查询最值

    (f[i][j])表示,从(i)位置开始的(2^j)个数中的最大值,例如(f[i][0])表示的是(i)位置的值,(f[i][1])表示的是(i)位置和(i+1)位置中两个数的最大值

    (code)

    void init()
    {
    	lg[0]=-1;
    	for(int i=1;i<=n;++i) lg[i]=lg[i>>1]+1;
    	for(int i=1;i<=n;++i) f[i][0]=a[i];
    	for(int j=1;j<=20;++j)
    		for(int i=1;i+(1<<j)-1<=n;++i)
    			f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
    }
    
    ......
    
    len=lg[r-l+1];//查询
    ans=max(f[l][len],f[r-(1<<len)+1][len]);
    
  • 相关阅读:
    截取
    逃避系统警察
    刷题
    排队
    侦察兵
    朋友
    楼层
    解码
    倒水
    魔法阵
  • 原文地址:https://www.cnblogs.com/lhm-/p/12229486.html
Copyright © 2020-2023  润新知