zoukankan      html  css  js  c++  java
  • 小明的赈灾计划

    思路:题意是求最大的区间异或和,首先利用异或的性质区间a[l~r]的异或和等于区间a[1~r]异或上a[1~l-1],因此把没个前缀异或和加入到trie树中

    ,然后考虑使得那个前缀和与某个前缀和的异或结果最大,即转化为trie树上求最大异或对的问题

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    
    using namespace std ;
    
    const int N = 4000010 ;
    
    int tr[N][2],idx ;
    int s[N] ;
    int n ;
    
    void add(int x){
        int p = 0 ;
        for(int i=30;i>=0;i--){
            int u = x >> i & 1 ;
            if(!tr[p][u]) tr[p][u] = ++ idx ;
            p = tr[p][u] ;
        }
    }
    
    int query(int x){
        int p = 0, res = 0 ;
        for(int i=30;i>=0;i--){
            int u = x >> i & 1 ;
            if(tr[p][!u]){
                res += 1 << i ;
                p = tr[p][!u] ;
            }else{
                p = tr[p][u] ;
            }
        }    
        return res ;
    }
    
    int main(){
        scanf("%d",&n) ;
        
        int ans = 0 ;
        add(0) ;//这里要插入0,考虑整个异或和的情况
        for(int i=1;i<=n;i++){
            int a ;
            scanf("%d",&a) ;
            s[i] = s[i-1] ^ a ;
            ans = max(ans,query(s[i])) ;
            add(s[i]) ;
        }
        
        printf("%d
    ",ans) ;
        
        return 0 ;
    }

    #include <iostream>#include <cstring>#include <algorithm>
    using namespace std ;
    const int N = 4000010 ;
    int tr[N][2],idx ;int s[N] ;int n ;
    void add(int x){int p = 0 ;for(int i=30;i>=0;i--){int u = x >> i & 1 ;if(!tr[p][u]) tr[p][u] = ++ idx ;p = tr[p][u] ;}}
    int query(int x){int p = 0, res = 0 ;for(int i=30;i>=0;i--){int u = x >> i & 1 ;if(tr[p][!u]){res += 1 << i ;p = tr[p][!u] ;}else{p = tr[p][u] ;}}return res ;}
    int main(){scanf("%d",&n) ;int ans = 0 ;add(0) ;for(int i=1;i<=n;i++){int a ;scanf("%d",&a) ;s[i] = s[i-1] ^ a ;ans = max(ans,query(s[i])) ;add(s[i]) ;}printf("%d ",ans) ;return 0 ;}

  • 相关阅读:
    Centos 卸载 MySQL
    Kafka体系架构、命令、Go案例
    Go 平滑重启(优雅重启)
    etcd集群数据迁移至新集群
    ubuntu 20.04使用TLSv1
    mybatis拦截器对SQL处理,数据权限逻辑控制
    java敏感字查找和替换
    SpringBoot自定义validation验证
    java使用druid解析器解析SQL语句
    国产数据库人大金仓 KingbaseES V8 R2 在 x86_64 Linux 安装过程
  • 原文地址:https://www.cnblogs.com/gulangyuzzz/p/12494109.html
Copyright © 2011-2022 走看看