1 条题解

  • 0
    @ 2024-3-5 19:12:51
    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1e5 + 5;
    struct Node {
        int s[2], id;
    } tr[maxn*32];
    int n, idx, a[maxn], ans = -1, l, r;
    
    void ins(int i) {
        int u = 0;
        for (int d = 30; d >= 0; d--) {
            int x = (a[i] >> d) & 1;
            int &s = tr[u].s[x];
            if (!s) s = ++idx;
            u = s;
        }
        tr[u].id = i;
    }
    
    int cal(int a) {
        int u = 0;
        for (int d = 30; d >= 0; d--) {
            int x = (a >> d) & 1;
            int s = tr[u].s[x^1];
            if (s) u = s;
            else u = tr[u].s[x];
            assert(u);
        }
        return tr[u].id;
    }
    
    int main() {
        scanf("%d", &n);
        ins(0);
        for (int i = 1; i <= n; i++) {
            scanf("%d", a+i);
            a[i] ^= a[i-1];
            int j = cal(a[i]);
            int tmp = a[i] ^ a[j];
            if (tmp > ans || tmp == ans && i < r || tmp == ans && i == r && i-j < r-l+1)
                ans = tmp, l = j+1, r = i;
            ins(i);
        }
        printf("%d %d %d\n", ans, l, r);
        return 0;
    }
    
    
    • 1

    信息

    ID
    53
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    4
    已通过
    2
    上传者