大佬求调
  • 板块灌水区
  • 楼主jhy118
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/8/22 23:12
  • 上次更新2024/8/23 10:38:11
查看原帖
大佬求调
786393
jhy118楼主2024/8/22 23:12

给定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;
} 
2024/8/22 23:12
加载中...