一个小构思
  • 板块学术版
  • 楼主ngugtl
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/9/3 16:29
  • 上次更新2023/11/2 22:53:14
查看原帖
一个小构思
754519
ngugtl楼主2023/9/3 16:29

求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*/
2023/9/3 16:29
加载中...