牛客小白月赛13 D题

简介: 牛客小白月赛13 D题
链接:https://ac.nowcoder.com/acm/contest/549/D
来源:牛客网
位运算是一个非常重要的东西。
而小A最近在学习位运算,小A看到了一道很简单的例题,
是说从N个数里面选出N-1个数要让它们或起来的值最大,小A想知道这个答案是多少。你可以帮帮他吗?
思路:预处理了一下前缀L数组和后缀R数组,然后枚举那个不选的数就可以了,每次更新ans = max(ans, L[i - 1] | R[i + 1]) 。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 6e6 + 5;
int a[maxn];
int L[maxn], R[maxn];
int main() {
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
        L[i] = L[i - 1] | a[i];
    }
    for (int i = n; i >= 1; i--) {
        R[i] = R[i + 1] | a[i];
    }
    long long ans = 0;
    for (int i = 1; i <= n; i++) {
        ans = max(ans, (L[i - 1] | R[i + 1]) * 1LL);
    }
    cout << ans << endl;
    return 0;
}
相关文章
|
12月前
牛客小白月赛13 A题
牛客小白月赛13 A题
57 0
|
12月前
牛客小白月赛13 F题
牛客小白月赛13 F题
54 0
|
12月前
牛客小白月赛13 I题
牛客小白月赛13 I题
40 0
|
12月前
牛客小白月赛13 J题
牛客小白月赛13 J题
47 0
|
12月前
牛客小白月赛13 C题
牛客小白月赛13 C题
55 0
|
12月前
牛客小白月赛13 E题
牛客小白月赛13 E题
50 0
|
12月前
牛客小白月赛13 B题
牛客小白月赛13 B题
66 0
|
12月前
|
机器学习/深度学习 人工智能 算法