线性基

算法 | cpp | 线性代数 | 模板

2025年11月26日

struct Linnerbasis {
    std::array<i64, 64> base{0};
    bool insert(i64 x) {
        for (int i = 63; i >= 0; i--)
            if ((1ll << i) & x) {
                if (base[i])
                    x ^= base[i];
                else {
                    base[i] = x;
                    return true;
                }
            }
        return false;
    }
    void normaize() {
        for (int i = 62; i >= 0; i--)
            for (int j = i + 1; j < 64; j++)
                if ((base[i] ^ base[j]) < base[j]) base[j] = base[i] ^ base[j];
    }
};