A. 签到
通过一些分析可以发现,实际上最终的可能答案就是在所有点中选择奇数或偶数个点使得点权异或和最大。
异或和最大可以很自然的想到线性基,然后的问题就是如何处理奇偶的限制。
考虑给每个数加上一个极大的二进制位,然后通过改变这个初始值在这一位上的数可以使得最终的最大值的奇偶性确定。
B. 树(tree)
一眼分块,然后直接开始码,码完本机跑了10s,当场就自闭了。然后卡了卡常就本机1.5s了。。
正解的做法是考虑线段树分治,然后对于每个区间建出来虚树更新答案。
还有一种做法是点分治,就是在分治重心考虑子树中每个子孙的贡献,线段树上查询即可。
C. 区间(interval)
可以发现是个数颜色,然后强制在线,内存极小,所以也许可以想到bitset。
考虑对于得到每个区间的bitset,一种想法是给序列分个块,然后整块预处理,散块暴力合并。
发现如果预处理出任意两个整块直接的bitset空间就死了,然后这个区间又可以合并,所以考虑整个st表。
然后分块大小可以简单计算出$n/64$是最优的,然后直接暴力就行了。