#12327. 最大按位或数对

最大按位或数对

【普及组/提高】最大按位或数对

题目描述

给定一个长度为 n 的正整数数组 d[0..n1]d[0..n-1],请你找出所有满足条件的数对 (d[i],d[j]),其中0i,j<n(d[i], d[j]),其中 0 \le i, j < nd[i]<d[j]d[i] < d[j]

对每一对这样的数,计算它们的 ​按位或​(Bitwise OR):

v=d[i]d[j]v = d[i] \mid d[j]并在所有结果中取 ​最大值​。

如果不存在任何满足条件的数对,则输出 ​ -1​。


输入格式

  • 第一行:一个整数 n(数组长度)。
  • 第二行:n 个正整数,表示数组元素。

输出格式

输出一个整数,表示满足条件的数对的最大按位或值;若无满足条件的数对,输出 -1


样例 1

输入

5
2 3 1 7 7

输出

7

解释 满足条件的数对包括:

  • (2,3) → 2|3=3
  • (2,7) → 7
  • (3,7) → 7
  • (1,7) → 7 最大值是 7。

样例 2

输入

3
5 5 5

输出

-1

解释 所有元素相等,不存在 d[i] < d[j] 的数对,因此输出 -1。


数据范围

时间限制:1s 内存限制:256MB


提示

  • 运算符 | 在 C++ 中表示按位或(bitwise OR)。
  • 表达式 a + b - (a & b) 等价于 a | b