bzoj 3261: 最大异或和
题意:
给定一个非负整数序列 {a},初始长度为 N。
有 M个操作,有以下两种操作类型:
1 、A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1。
2 、Q l r x:询问操作,你需要找到一个位置 p,满足 l<=p<=r,使得:
a[p] xor a[p+1] xor ... xor a[N] xor x 最大,输出最大是多少。
n<=1e5,a[i]<=1e7
题解:
http://www.cnblogs.com/yinwuxiao/p/8025535.html
和这题的思路基本一致,越前面的位对其影响越大,所以从前到后考虑
其次,在查找的时候其实就类似于字符串的匹配,所以用trie树
由于修改操作的出现,应考虑可持久化trie
即与zkw线段树一样第一维维护前x个节点的前缀和,第二维维护字符串
而每次查询时,只需查询两个前缀相减是否大于0,判断该字符串是否存在
而修改时只需新建节点,在变动的整条链上++
代码: