给定n,一个数列a1,a2,...,an,任意删去一个数使得剩下所有的数连续异或的最大值 // 0<=n<=5e6
代码如下
#include<bits/stdc++.h>
using namespace std;
const int N=5000010;
int n;
long long a[N],aor[N];
int read()
{
int s=0,f=1;char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch)){
s=s*10+ch-'0';
ch=getchar();
}
return s*f;
}
void write(long long x){
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
}
int main()
{
freopen("aor.in","r",stdin);
freopen("aor.out","w",stdout);
long long ans=0;
n=read();
for(int i=1;i<=n;i++)a[i]=read();
aor[1]=a[1];
for(int i=2;i<=n;i++)
{
aor[i]=aor[i-1]|a[i];
}
for(int i=1;i<=n;i++)
{
if(i==1)if(aor[i+1]>ans)ans=aor[i+1];
if((aor[i-1]|aor[i+1])>ans)ans=(aor[i-1]|aor[i+1]);
}
write(ans);
return 0;
}