Description:
题目描述:
给定一个含n个元素的数组a,下标从1开始。请找出下面式子的最大值:(a[l1]a[l1+1]a[l1+2]...a[r1-1]a[r1])+(a[l2]a[l2+1]a[l2+2]...a[r2-1]a[r2]),其中1<=l1<=r1<l2<=r2<=n,^表示按位异或。
输入格式:
输入数据的第一行包含一个整数n,表示数组中的元素个数。
第二行包含n个整数a[1],a[2],...,a[n]。
输出格式:
输出一行包含给定表达式可能的最大值。
样例:
样例输入:
5
1 2 3 1 2
样例输出
6
数据范围与提示:
对于100%的数据,2<=n<=4e5,0<=a[i]<=1e9。
思路:
明显,0/1Trie树、
由于要求r1<l2,考虑以一个下标为分界线,在他之前的是r1,l1,之后是r2,l2
用两个数组r,l表示在i~n的范围内最大的异或和的值与1~i的范围内最大的异或和。有:
l[i]=max(l[i-1],t.search(x)),x表示从1到i的异或和。
r[i]=max(r[i+1],t.search(x)),x表示从i到n的异或和。
然后O(n)循环取l[i]+r[i+1]的max即可。
2021.6.6 现役