zoukankan      html  css  js  c++  java
  • Bzoj 4260——Codechef REBXOR(Trie)

    传送门

     事实上,只需稍加变化就可以将此题变为The Xor Largest Pair (这是什么玩意儿???请看我的随笔(传送门))

    设l[i]表示1≤l≤r≤i的最大的a[l]^a[l+1]^...^a[r],r[i]表示i≤l≤r≤N的最大a[l]^a[l+1]^...^a[r],则结果为max(l[i]+r[i+1]); 那么,如何求l[i]与r[i]呢?

    设x[i]表示a[0]^a[1]^...^a[i](a[0]=0),那么l[i]=max(x[i]^x[j])(0≤j<i),此时用一下The Xor Largest Pair即可,r[i]同理

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<algorithm>
     6 #include<cstdlib>
     7 using namespace std;
     8 int ch[400005<<5][2],tot=1,n,a[400005],l[400005],r[400005];
     9 void insert(int x)
    10 {
    11     int u=1;
    12     for (int i=1<<30; i; i>>=1){
    13         int c=x&i; if (c) c=1; else c=0;
    14         if (!ch[u][c]) ch[u][c]=++tot;
    15         u=ch[u][c];
    16     }
    17 }
    18 int get(int x)
    19 {
    20     int u=1,ans=0;
    21     for (int i=1<<30; i; i>>=1){
    22         int c=x&i; if (c) c=0; else c=1;
    23         if (ch[u][c]) ans+=i,u=ch[u][c]; else u=ch[u][!c];
    24     }
    25     return ans;
    26 }
    27 int main()
    28 {
    29     scanf("%d",&n);
    30     memset(ch,0,sizeof(ch));
    31     for (int i=1; i<=n; i++) scanf("%d",&a[i]);
    32     insert(0); int now=0;
    33     for (int i=1; i<=n; i++){
    34         now^=a[i];
    35         insert(now);
    36         l[i]=max(l[i-1],get(now));
    37     }
    38     memset(ch,0,sizeof(ch));  tot=1;insert(0); now=0;
    39     for (int i=n; i>=1; i--){
    40         now^=a[i];
    41         insert(now);
    42         r[i]=max(r[i+1],get(now));
    43     }
    44     int ans=0;
    45     for (int i=1; i<n; i++) ans=max(ans,l[i]+r[i+1]);
    46     cout<<ans<<endl;
    47     return 0;
    48 }

     miao~~~

  • 相关阅读:
    打印机故障之乌龙事件
    为什么 FastAdmin 的插件不全部免费?
    PADS Logic 脚本的 Fields 一个对象记录
    时间模块和random模块

    模块的导入和使用
    递归函数与二分查找算法
    递归函数
    匿名函数
    内置函数
  • 原文地址:https://www.cnblogs.com/wangyh1008/p/9397243.html
Copyright © 2011-2022 走看看