zoukankan      html  css  js  c++  java
  • 模板

    SparseTable,俗称ST表,其功能,就是静态的RMQ(区间最值查询)问题的解决。注意传入查询的时候两个参数的合法性,或者可以进行一次全部初始化来使得越界值不产生负面影响。不过访问越界是写程序的不良习惯,不应该指望进行一次额外的初始化把它消除。再重申一次对任何位置的访问都要保证不越界。有一些加了某个值之后就会越界。既然是模板那就写多两行预防以后的问题吧(比如某个整除分块也有类似的隐藏bug)。实际应用的时候可以删除提高性能。

    时间复杂度:
    初始化1:O(MAXN)
    初始化2:O(nlogn)
    查询:O(1)

    空间复杂度:
    O(NAXNlogMAXN)

    struct SparseTable {
        static const int MAXLOGN = 19;
        static const int MAXN = 200000;
        int n, logn[MAXN + 5];
        int f[MAXN + 5][MAXLOGN + 1];
    
        void Init1() {
            logn[1] = 0;
            for(int i = 2; i <= MAXN; i++)
                logn[i] = logn[i >> 1] + 1;
        }
    
        void Init2(int _n) {
            n = _n;
            for(int i = 1; i <= n; i++)
                f[i][0] = a[i];
            for(int j = 1, maxlogn = logn[n]; j <= maxlogn; 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]);
            }
        }
    
        int Query(int l, int r) {
            l = max(1, l), r = min(n, r);
            if(l > r)
                exit(-1);
            int s = logn[r - l + 1];
            return max(f[l][s], f[r - (1 << s) + 1][s]);
        }
    } st;
    
  • 相关阅读:
    Swift
    ios中沙盒
    Mac下安装apk(命令形式)
    iOS 保存异常日志
    android sliding menu
    iOS 苹果官方 Crash文件分析方法 (iOS系统Crash文件分析方法)
    iOS应用崩溃日志分析
    iOS 推送
    iOS 修改textholder的颜色
    iOS 7.1 UITapGestureRecognizer 不好用的解决办法
  • 原文地址:https://www.cnblogs.com/KisekiPurin2019/p/11854489.html
Copyright © 2011-2022 走看看