#include <bits/stdc++.h>
using namespace std;
#define ll unsigned long long
#define fo(i,a,b) for(int i=a;i<b;i++)
vector<ll>a(64);
int find(int x){
if(a[x]!=x){
a[x]=find(a[x]);
}
return a[x];
}
void arrage_sum(int x,int y){
x=find(x);
y=find(y);
if(x!=y){
a[x]=a[y];
}
}
int main() {
ll n;
cin>>n;
while(n--){
ll m;
cin>>m;
vector<vector<int>>vv(64);//记录0到63位上为一的数的下标;
vector<ll>v(m);
fo(i,0,64)a[i]=i;//初始化并查集
fo(i,0,m){
cin>>v[i];
vector<ll>b;//记录每个数的二进制位数为一的数
for(int j=0;j<64;j++){
if((v[i]>>j)&1){
vv[j].emplace_back(i);
b.emplace_back(j);
}
}
if(b.size()>1){
fo(k,1,b.size()){
arrage_sum(b[k-1],b[k]);
}
}
}
fo(i,0,64){
int x=find(i);
if(x!=i){
fo(j,0,vv[i].size()){
vv[x].emplace_back(vv[i][j]);
}
sort(vv[x].begin(),vv[x].end());
}
}
int ans=0;
fo(i,0,64){
ll flag=0;
if(vv[i].size()>1){
fo(j,1,vv[i].size()){
if(vv[i][j]==vv[i][j-1]){
flag++;
}
}
}
ans=max(ans,int(vv[i].size()-flag));
}
// fo(i,0,64)cout<<a[i]<<" ";
// fo(i,0,64){
// fo(j,0,vv[i].size()){
// cout<<vv[i][j]<<" ";
// }
// cout<<'\n';
// }
cout<<ans<<'\n';
}
return 0;
}
// 64 位输出请用 printf("%lld")
本体

京公网安备 11010502036488号