zoukankan      html  css  js  c++  java
  • BZOJ 4260Codechef REBXOR[字典树]

    时间限制: 10 Sec

    Description

    Input

    输入数据的第一行包含一个整数N,表示数组中的元素个数。

    第二行包含N个整数A1,A2,…,AN。

    Output

    输出一行包含给定表达式可能的最大值。

    Sample Input

    5
    1 2 3 1 2

    Sample Output

    6

    HINT

    满足条件的(l1,r1,l2,r2)有:(1,2,3,3),(1,2,4,5),(3,3,4,5)。

    对于100%的数据,2 ≤ N ≤ 4*105,0 ≤ Ai ≤ 109。

    要用到异或的一个性质,$a\,xor\, b\, xor\, a\, =\, b$。对于l1r1,只要维护前缀和,每次查询结束之后把前缀和放到字典树上。对于l2r2同样要维护后缀和。检查前缀和后缀的最大值就是答案。

    #include "bits/stdc++.h"
    using namespace std;
    const int maxn = 400000+10;
    int a[maxn], val[maxn*32];
    int ch[maxn*32][2], sum[maxn];
    int sz, pre[maxn], suf[maxn];
    void insert_01tree(int x) {
        int u = 0;
        for (int i = 31; i >= 0; i--) {
            int c = (x>>i)&1;
            if (!ch[u][c]) {
                memset(ch[sz], 0,sizeof(ch[sz]));
                val[sz] = 0; ch[u][c] = sz++; 
            }
            u = ch[u][c];
        }
        val[u] = x;
    }
    int query(int x) {
        int u = 0;
        for (int i = 31; i >= 0; i--) {
            int c = (x>>i)&1;
            if(ch[u][c^1]) u = ch[u][c^1];
            else u = ch[u][c];
        }
        return val[u]^x;
    }
    void init() {
        memset(ch[0], 0, sizeof(ch[0]));
        sz = 1;
    }
    int main(int argc, char const *argv[])
    {
        int N; init();
        scanf("%d", &N);
        for (int i = 1; i <= N; i++) scanf("%d", a+i);
        pre[0] = suf[N+1] = 0; 
        for (int i = 1; i <= N; i++) pre[i]=pre[i-1]^a[i];
        for (int i = N; i >= 1; i--) suf[i]=suf[i+1]^a[i];
        insert_01tree(pre[0]);
         for (int i = 1; i <= N; i++) {
             sum[i] = max(sum[i-1], query(pre[i]));
             insert_01tree(pre[i]);
         }
         init(); int ans = 0;
         insert_01tree(suf[N+1]);
         for (int i = N-1; i >= 1; i--) {
             ans = max(ans, sum[i - 1]+query(suf[i]));
             insert_01tree(suf[i]);
         }
         printf("%d
    ", ans);
        return 0;
    }
  • 相关阅读:
    Git 中 .gitignore 的配置语法
    DMX512协议
    k8s 报错总结
    yum 源配置
    docker 安装 docker-compose
    docker 搭建 Harbor 仓库
    linux 远程执行命令
    远程从服务器A拷贝文件到服务器B
    docker 搭建私服仓库
    awk和xargs清除docker 容器、镜像
  • 原文地址:https://www.cnblogs.com/cniwoq/p/7346630.html
Copyright © 2011-2022 走看看