不会dp怎么办,数据结构开艹
代码:
#include<bits/stdc++.h>
using namespace std;
#define ls u<<1
#define rs ls|1
#define N 100010
struct Node{
int l,r,sum;
}tr[N<<2];
int n;
int a[N];
void pushup(int u){
tr[u].sum=tr[ls].sum|tr[rs].sum;
}
void build(int u,int l,int r){
if(l==r)tr[u]={l,r,a[l]};
else{
int mid=l+r>>1;
tr[u]={l,r};
build(ls,l,mid),build(rs,mid+1,r);
pushup(u);
}
}
int query(int u,int l,int r){
if(tr[u].l>=l&&tr[u].r<=r)return tr[u].sum;
else{
int mid=tr[u].l+tr[u].r>>1;
int res=0;
if(l<=mid)res|=query(ls,l,r);
if(r>mid)res|=query(rs,l,r);
return res;
}
}
bool check(int k){
int sum=query(1,1,k);
for(int i=2;i<=n-k+1;i++){
if(sum!=query(1,i,i+k-1))return false;
}
return true;
}
void solve(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
build(1,1,n);
int l=1,r=n;
while(l<=r){
int mid=l+r>>1;
if(check(mid))r=mid-1;
else l=mid+1;
}
cout<<l<<endl;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int t=1;
cin>>t;
while(t--){
solve();
}
return 0;
}
牛哇