zoukankan      html  css  js  c++  java
  • [模板] 动态ST表

    ST表本身是不可修改的。

    如果考虑增加一个数,可以把ST表反过来写,即f[i][j]表示i往前1<<j个数,一个数最多影响logn个数,常数非常小。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    
    const int MAXN=200005;
    
    typedef long long ll;
    
    inline ll rd(){
        ll ret=0,f=1;char c;
        while(c=getchar(),!isdigit(c))f=c=='-'?-1:1;
        while(isdigit(c))ret=ret*10+c-'0',c=getchar();
        return ret*f;
    }
    
    ll f[MAXN][32];
    ll m,mod;
    int p;
    
    int main(){
        m=rd();mod=rd();
        char s[5];ll x,t=0;
        while(m--){
            scanf("%s",s);x=rd();
            if(s[0]=='Q') {
                int len=log2(x);
                printf("%lld
    ",t=max(f[p][len],f[p-x+(1<<len)][len])%mod);
            }else{
                f[++p][0]=(x+t)%mod;
                for(int i=1;p-(1<<i)>=0;i++) f[p][i]=max(f[p][i-1],f[p-(1<<(i-1))][i-1]);
            }
        }
        return 0;
    }

    本文来自博客园,作者:GhostCai,转载请注明原文链接:https://www.cnblogs.com/ghostcai/p/9291670.html

  • 相关阅读:
    php数组
    php数组排序
    php超级全局变量
    php循环
    php函数
    PHP魔术常量
    php面向对象
    static 关键字
    Final 关键字
    内置函数
  • 原文地址:https://www.cnblogs.com/ghostcai/p/9291670.html
Copyright © 2011-2022 走看看