倍增RMQ(ST)板子

总结

第一步:构造RMQ,变量为n。
第二步:记得ST表值初始化为inf/-inf,以及2^0倍赋值和转移方程的max/min修改

///第一步:构造RMQ,变量为n。
///第二步:记得ST表值初始化为inf/-inf,以及2^0倍赋值和转移方程的max/min修改
struct RMQ
{
    vector<vector<int> >ST;
    RMQ(int n=0)
    {
        ST.resize(n+1,vector<int>(21,inf));
        for(int i=1;i<=n;i++)
            ST[i][0]=pre[i];
        for(int i=1;(1<<i)<=n;i++)
            for(int j=1;j+(1<<i)-1<=n;j++)
                ST[j][i]=min(ST[j][i-1],ST[j+(1<<i-1)][i-1]);
    }
    int query(int l,int r)
    {
        int k=log2(r-l+1);
        return min(ST[l][k],ST[r-(1<<k)+1][k]);
    }
};
发布了149 篇原创文章 · 获赞 5 · 访问量 6899

猜你喜欢

转载自blog.csdn.net/weixin_44224825/article/details/104562384