-
G - WiFi Password
- Gym - 101608G
- 题意:
- 求一个最长的|运算不超过v的连续序列
- 尺取法 碰到不行往回倒
-
#include<bits/stdc++.h> using namespace std; #define maxn 100050 long long t,n,m,v,a[maxn]; long long r,ans,sum,j; int main() { freopen("wifi.in","r",stdin); cin>>t; while(t--) { cin>>n>>v; ans=0; r=1; for(int i=0; i<n; i++) cin>>a[i]; sum=a[0]; for(int i=0; i<n; i++) { if(i==r) { sum=a[i]; r=i+1; } while(r<n&&(a[r]|sum)<=v) { sum|=a[r]; r++; } if(sum<=v) ans=max(ans,r-i); if(r==n) break; sum=a[r]; j=r-1; while((a[j]|sum)<=v) { sum|=a[j]; j--; } i=j; } cout<<ans<<endl; } return 0; }
G - WiFi Password- | 运算-倒尺取法
最新推荐文章于 2023-11-11 14:55:37 发布