线性基
class Base { static const int max_bit = 32; // 注意 使用的时候要减一 int base[max_bit]; public : void init() { memset(base, 0, sizeof(base)); } void insert(int val) { for (int i=max_bit-1; i>=0; --i) { // 要减一 ,因为位移是0~n-1位的 if ((val >> i) & 1) { if (!base[i]) { base[i] = val; break; } val ^= base[i]; } } } }base;