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,判断该字符串是否存在

而修改时只需新建节点,在变动的整条链上++

代码:

原文地址:https://www.cnblogs.com/yinwuxiao/p/8025695.html