#include #define pb push_back #define mp make_pair #define F first #define S second using namespace std; vector arr(100005); struct node { int maxm=INT_MIN,minm=INT_MAX,orr=0,anda=INT_MAX; } seg[400005],temp; void construct(int l,int r,int index) { if(l==r) { seg[index].maxm=seg[index].minm=seg[index].orr=seg[index].anda=arr[l]; return ; } int mid=(l+r)>>1; construct(l,mid,2*index+1); construct(mid+1,r,2*index+2); seg[index].maxm=max(seg[2*index+1].maxm,seg[2*index+2].maxm); seg[index].minm=min(seg[2*index+1].minm,seg[2*index+2].minm); seg[index].orr=(seg[2*index+1].orr|seg[2*index+2].orr); seg[index].anda=(seg[2*index+1].anda&seg[2*index+2].anda); return ; } node query(int l,int r,int l0,int r0,int index) { if(l0<=l&&r<=r0) return seg[index]; if(l>r0||r>1; node tem1=query(l,mid,l0,r0,2*index+1); node tem2=query(mid+1,r,l0,r0,2*index+2); node tem3; tem3.maxm=max(tem1.maxm,tem2.maxm); tem3.minm=min(tem1.minm,tem2.minm); tem3.orr=(tem1.orr|tem2.orr); tem3.anda=(tem1.anda&tem2.anda); return tem3; } bool cmp(pair > p1,pair > p2) { return p1.F>p2.F; } int main() { int n; int k; cin >> n >> k; for(int A_i = 1; A_i <=n; A_i++){ cin >> arr[A_i]; } construct(1,n,0); int arr1[n+1]; memset(arr1,0,sizeof(arr1)); vector > >v; for(int i=1;i<=n;i++) { for(int j=i;j<=n;j++) { node tem=query(1,n,i,j,0); if((tem.orr-tem.anda-(tem.maxm-tem.minm))>=k) {v.pb(mp(j-i+1,mp(i,j)));} } } sort(v.begin(),v.end(),cmp); int sz=v.size(); for(int i=0;i