1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| template <int N, typename T = int> class XorBasis { std::array<T, N> val; int cnt;
public: XorBasis() : cnt(0) { val.fill(0); } void add(T v) { for (int i = N - 1; i >= 0; i--) { if (!(v >> i & 1)) continue; if (!val[i]) { cnt++, val[i] = v; break; } else v ^= val[i]; } } }
|