CODECHEF September Challenge 2015 REBXOR:Nikitosh 和异或

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 现役

上一篇:CC攻击


下一篇:Ozon Tech Challenge 2020 (Div.1 + Div.2) F. Kuroni and the Punishment 随机化