题意
给定一个序列,选择一个区间,使得区间第二大的数与区间内其它的数字按位异或得到的结果的最大值最大.
分析
我们求出将每一个数字作为第二大的数时,向左向右最远能扩展到多少.
再按照输入顺序给序列做可持久化Trie,这棵Trie表示每个数字二进制下每一位的0或1.
于是我们就根据可持久化数据结构的可减性找到任意一个区间的Trie的形态.
将每一个数在它所应属的区间的Trie树上求答案即可.
因为一个数与自己按位异或得到结果为0,所以第二大的数在这个区间内也没有影响.
代码
1 | #include <cstdio> |