2 条题解

  • 0
    @ 2026-4-23 9:42:20

    • 0
      @ 2025-10-8 17:10:07
      #include<bits/stdc++.h>
      using namespace std;
      const int N=4e5+10;
      int id,ch[N*31][2],a[N],L[N],R[N];
      void ins(int x)
      {
      	int p=0;
      	for(int i=30;i>=0;i--)
      	{
      		int j=(x>>i)&1;
      		if(!ch[p][j])ch[p][j]=++id;
      		p=ch[p][j];
      	}
      }
      int query(int x)
      {
      	int p=0,ret=0;
      	for(int i=30;i>=0;i--)
      	{
      		int j=(x>>i)&1;
      		if(ch[p][!j])p=ch[p][!j],ret+=(1<<i);
      		else         p=ch[p][j];
      	}
      	return ret;
      }
      int main()
      {
      	int n,sum;scanf("%d",&n);
      	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
      	
      	id=sum=0;memset(ch,0,sizeof(ch));L[0]=0;ins(0);//ins(0)使得单个数的存在成为可能
      	for(int i=1;i<=n;i++)
      	{
      		sum^=a[i];
      		ins(sum);
      		L[i]=max(L[i-1],query(sum)); 
      	}
      
      	id=sum=0;memset(ch,0,sizeof(ch));R[n+1]=0;ins(0);
      	for(int i=n;i>=1;i--)
      	{
      		sum^=a[i];
      		ins(sum);
      		R[i]=max(R[i+1],query(sum)); 
      	}
      	
      	int ans=0;
      	for(int i=1;i<n;i++)ans=max(ans,L[i]+R[i+1]);
      	printf("%d\n",ans);
      	return 0;
      }
      
      • 1

      信息

      ID
      5925
      时间
      1000ms
      内存
      512MiB
      难度
      7
      标签
      递交数
      80
      已通过
      21
      上传者