Loading docs/math/basis.md +4 −4 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ 构造线性基的方法如下: 对原集合的每个数 p 转为二进制,从高位向低位扫,对于第 x 位是 1 的,如果 $a_x$ 不存在,那么令 $a_x=p$ 并结束扫描,如果存在,令 $p=p xor a_x$ 。 对原集合的每个数 p 转为二进制,从高位向低位扫,对于第 $x$ 位是 1 的,如果 $a_x$ 不存在,那么令 $a_x=p$ 并结束扫描,如果存在,令 $p=p~\text{xor}~a_x$ 。 代码: Loading @@ -36,8 +36,8 @@ inline void insert(long long x) { 将线性基从高位向低位扫,若 xor 上当前扫到的 $a_x$ 答案变大,就把答案异或上 $a_x$ 。 为什么能行呢?因为从高往低位扫,若当前扫到第 i 位,意味着可以保证答案的第 i 位为 1,且后面没有机会改变第 i 位。 为什么能行呢?因为从高往低位扫,若当前扫到第 $i$ 位,意味着可以保证答案的第 $i$ 位为 1,且后面没有机会改变第 $i$ 位。 查询原集合内任意几个元素 xor 的最小值,就是线性基集合所有元素中最小的那个 查询原集合内任意几个元素 xor 的最小值,就是线性基集合所有元素中最小的那个。 查询某个数是否能被异或出来,类似于插入,如果最后插入的数 p 被异或成了 0,则能被异或出来 查询某个数是否能被异或出来,类似于插入,如果最后插入的数 $p$ 被异或成了 0,则能被异或出来。 Loading
docs/math/basis.md +4 −4 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ 构造线性基的方法如下: 对原集合的每个数 p 转为二进制,从高位向低位扫,对于第 x 位是 1 的,如果 $a_x$ 不存在,那么令 $a_x=p$ 并结束扫描,如果存在,令 $p=p xor a_x$ 。 对原集合的每个数 p 转为二进制,从高位向低位扫,对于第 $x$ 位是 1 的,如果 $a_x$ 不存在,那么令 $a_x=p$ 并结束扫描,如果存在,令 $p=p~\text{xor}~a_x$ 。 代码: Loading @@ -36,8 +36,8 @@ inline void insert(long long x) { 将线性基从高位向低位扫,若 xor 上当前扫到的 $a_x$ 答案变大,就把答案异或上 $a_x$ 。 为什么能行呢?因为从高往低位扫,若当前扫到第 i 位,意味着可以保证答案的第 i 位为 1,且后面没有机会改变第 i 位。 为什么能行呢?因为从高往低位扫,若当前扫到第 $i$ 位,意味着可以保证答案的第 $i$ 位为 1,且后面没有机会改变第 $i$ 位。 查询原集合内任意几个元素 xor 的最小值,就是线性基集合所有元素中最小的那个 查询原集合内任意几个元素 xor 的最小值,就是线性基集合所有元素中最小的那个。 查询某个数是否能被异或出来,类似于插入,如果最后插入的数 p 被异或成了 0,则能被异或出来 查询某个数是否能被异或出来,类似于插入,如果最后插入的数 $p$ 被异或成了 0,则能被异或出来。