求a数组亦或x后得到的b数组中,值都属于a数组的最长连续数组长度
#include<bits/stdc++.h>
using namespace std;
int a[5000001],b[5000001],n,q;
int prc(int x){
for(int i=1;i<=n;i++){
b[i]=a[i]^x;
}
/* for(int i=1;i<=n;i++){
cout<<b[i]<<" ";
}
system("pause");*/ //按位异或正常
int r=1,l,ans=-1;
for(int i=1;i<=n;i++){
if(a[b[i]]){
r=l=i;
break;//找到第一个bi满足b[i]属于a[n],r=i记录位置
}
}
/*cout<<r<<l;
system("pause");*/ //r,l初始化正常
while(r<=n){
r++;
if(!a[b[r]]){//r所在位置的数b[r]在a[i](a[b[r]])中不存在则结束此段计数,重新开始
/*cout<<r<<" "<<r-l;
system("pause");*/ //答案计算正常
ans=max(ans,r-l);//[(r-l+1)-1] 长度应为l到r-1
l=r;
}
}
for(int i=1;i<=n;i++){
a[i]=b[i];
}
/* for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
system("pause");*/
return ans;
}
int main(){
cin>>n>>q;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=q;i++){
int x;
cin>>x;
cout<<prc(x)<<endl;
}
/* for(int i=1;i<=n;i++){
cout<<a[i];
}*/
return 0;
}
/*5 1
1 2 3 4 5
1*/