description:
从n个数中选取n-1个数使得n-1个或值最大
solution:
维护一个前缀或和 和 一个后缀或和 之后On枚举一个不选的数 O1得到答案 取最大值就行
code:
#include<bits/stdc++.h> using namespace std; #define LL long long const int N = 5e6 + 5; LL a[N],b[N],c[N]; int main() { ios::sync_with_stdio(0); int n;cin >> n; for(int i = 1;i <= n;i ++){ cin >> a[i]; b[i] = b[i - 1] | a[i]; } for(int i = n;i >= 1;i --){ c[i] = c[i + 1] | a[i]; } LL ma = -1; for(int i = 1;i <= n;i ++){ ma = max(ma,b[i - 1] | c[i + 1]); } cout << ma << '\n'; return 0; }