[算法模板]线性基

Posted gavinzheng

tags:

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

线性基

GavinZheng敲懒的。。。

menci大佬的线性基博客

模板代码引自menci:

struct LinearBasis

    long long a[MAXL + 1];

    LinearBasis()
    
        std::fill(a, a + MAXL + 1, 0);
    

    LinearBasis(long long *x, int n)
    
        build(x, n);
    

    void insert(long long t)
    
        for (int j = MAXL; j >= 0; j--)
        
            if (!t) return;
            if (!(t & (1ll << j))) continue;

            if (a[j]) t ^= a[j];
            else
            
                for (int k = 0; k < j; k++) if (t & (1ll << k)) t ^= a[k];
                for (int k = j + 1; k <= MAXL; k++) if (a[k] & (1ll << j)) a[k] ^= t;
                a[j] = t;
                break;
            
        
    

    // 数组 x 表示集合 S,下标范围 [1...n]
    void build(long long *x, int n)
    
        std::fill(a, a + MAXL + 1, 0);

        for (int i = 1; i <= n; i++)
        
            insert(x[i]);
        
    

    long long queryMax()
    
        long long res = 0;
        for (int i = 0; i <= MAXL; i++) res ^= a[i];
        return res;
    

    void mergeFrom(const LinearBasis &other)
    
        for (int i = 0; i <= MAXL; i++) insert(other.a[i]);
    

    static LinearBasis merge(const LinearBasis &a, const LinearBasis &b)
    
        LinearBasis res = a;
        for (int i = 0; i <= MAXL; i++) res.insert(b.a[i]);
        return res;
    
;

技术图片

以上是关于[算法模板]线性基的主要内容,如果未能解决你的问题,请参考以下文章

Luogu P5556 圣剑护符(线性基,树链剖分,线段树)

Luogu P5556 圣剑护符(线性基,树链剖分,线段树)

待更新算法

算法模板:数论之质数全家桶(内含埃氏筛法,欧拉线性筛法详解)沈七

模板线性基

P3812 模板线性基