Address
Solution
- 一道好题
- 看到「最大异或和子集」,很容易想到线性基
- 然后看到区间限制,直接想到线段树维护线性基,合并信息时 O ( log 2 c ) O(\log^2c) O(log2c) 合并线性基
- 然后你会发现你 TLE 了, O ( n log n log 2 c ) O(n\log n\log^2c) O(nlognlog2c) 的复杂度在 n n n 为 5 × 1 0 5 5\times10^5 5×105 级别的数据下显然是跑不进 3s 的……
- 我们需要考虑复杂度更为优秀的做法
O ( n log 2 c ) O(n\log^2c) O(nlog2c)
- 可以得到,如果固定右端点 r r r ,左端点 l l l 取 [ 1 , r ] [1,r] [1,r] 内的任意一点,将 c c c 的区间 [ l , r ] [l,r] [l,r] 内的数构成线性基,那么能够得到的本质不同的线性基只有 O ( log c ) O(\log c) O(logc) 个
- 且本质相同的线性基对应的 l l l 是一段区间
- 证明:显然如果区间 [ l − 1 , r ] [l-1,r] [l−1,r] 的数构成的线性基和区间 [ l , r ] [l,r] [l,r] 的数构成的线性基不同,那么 [ l − 1 , r ] [l-1,r] [l−1,r] 的线性基一定比 [ l , r ] [l,r] [l,r] 的线性基多一个基变量
- 而基变量最多只有 O ( log c ) O(\log c) <