板子 ST表

Posted pg633

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了板子 ST表相关的知识,希望对你有一定的参考价值。

 

技术分享图片
#include<bits/stdc++.h>
using namespace std;
#define LOACL  freopen("in","r",stdin);\
         freopen("out","w",stdout); 
const int    sz = (int)1e6 + 5; 

#define CLR(arr,val) memset(arr,val,sizeof(arr)) 
#define DBG(x) cout<<(#x)<<"="<<x<<endl
#define DBG2(x,y) cout<<(#x)<<"="<<x<<"\t"<<(#y)<<"="<<y<<endl
#define DBG3(x,y,z) cout<<(#x)<<"="<<x<<"\t"<<(#y)<<"="<<y<<"\t"<<(#z)<<"="<<z<<endl

#define FOR(i, a, b)  for(int i=(a); i<(b); i++)
#define REP(i, a, b)  for(int i=(a); i<=(b); i++)
#define DOWN(i, a, b) for(int i=(a); i>=(b); i--)


#define all(x) x.begin(),x.end()
#define low(x) (x)&(-x)
#define pb push_back
typedef long long ll; 
typedef double dl; 
int a[sz][22],n,m;
void read(int &x)
{
    x=0;
    char c = getchar(); int f =1;
    while(!isdigit(c)) 
    {
        if(c==-) f=-1;
        c=getchar();
    }
    while(isdigit(c)) x=x*10+c-48,c=getchar();
    x*=f;
}

int  query(int l,int r)
{
    int k=(int )log2(r-l+1);
    return max(a[l][k],a[r-(1<<k)+1][k]);
}
int main()
{
    LOACL
    read(n),read(m);
    REP(i,1,n) read(a[i][0]); 
    REP(j,1,21) for(int i=1;i+(1<<j)-1<=n;i++)
    {
        a[i][j]=max(a[i][j-1],a[i+(1<<(j-1))][j-1]);
    }
    int l,r;
    REP(i,1,m) 
    {
        read(l),read(r);
        cout<<query(l,r)<<"\n";
    }   

   

    return 0;
}
View Code

话说 这个好像那个lca 就用到了

大体意思就是dp[i][j]  通过 i跳了 2^j 然后到达的地方 ,这样

就可以用扫描 线 进行 扫描 ,上面 query dp[l][k]   dp[r-1<<k+1][ k ]

 

以上是关于板子 ST表的主要内容,如果未能解决你的问题,请参考以下文章

背板子

ST IKS01A1 驱动程序分析

RMQ板子

STM32F407板子总是重启

19 01 11 javascript ?????????????????????(???????????????) ??????????????????????????????(代码片段

板子们~