/* */ //#pragma GCC optimize("O3") #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define y0 sdkfaslhagaklsldk #define y1 aasdfasdfasdf #define yn askfhwqriuperikldjk #define j1 assdgsdgasghsf #define tm sdfjahlfasfh #define lr asgasgash #define norm asdfasdgasdgsd #define have adsgagshdshfhds #define ends asdgahhfdsfshdshfd #define eps 1e-8 #define M_PI 3.141592653589793 #define bsize 512 #define ldouble long double using namespace std; #define bs 1000000007 const int N = 2000031; int n,k; int A[N]; vector > mins,maxs; long long t[N*4],toadd[N*4]; int first_present[N],first_absent[N]; int ar[N]; long long t_max[N*4],toadd_max[N*4]; void push(int v){ t[v*2]+=toadd[v]; toadd[v*2]+=toadd[v]; t[v*2+1]+=toadd[v]; toadd[v*2+1]+=toadd[v]; toadd[v]=0; } int get(int v,int tl,int tr){ if (tl==tr) return tl; push(v); int tm=tl+tr; tm/=2; if (t[v*2+1]>=k) return get(v*2+1,tm+1,tr); return get(v*2,tl,tm); } void add(int v,int tl,int tr,int l,int r,int val){ if (l>r) return; if (tl==l&&tr==r){ t[v]+=val; toadd[v]+=val; return; } push(v); int tm=tl+tr; tm/=2; add(v*2,tl,tm,l,min(r,tm),val); add(v*2+1,tm+1,tr,max(tm+1,l),r,val); t[v]=max(t[v*2],t[v*2+1]); } void UPD(int l,int r,int val){ add(1,1,n,l,r,val); } int get_rmost(){ if (t[1]r) return; if (tl==l&&tr==r){ t_max[v]=max(t_max[v],val); toadd_max[v]=max(toadd_max[v],val); return; } push_max(v); int tm=tl+tr; tm/=2; update(v*2,tl,tm,l,min(r,tm),val); update(v*2+1,tm+1,tr,max(tm+1,l),r,val); t_max[v]=max(t_max[v*2],t_max[v*2+1]); } long long get(int v,int tl,int tr,int ps) { if (tl==tr){ return t_max[v]; } push_max(v); int tm=tl+tr; tm/=2; if (ps<=tm) return get(v*2,tl,tm,ps); else return get(v*2+1,tm+1,tr,ps); } void Build(int v,int tl,int tr){ t_max[v]=-1; toadd_max[v]=-1e9; if (tl==tr) return; int tm=tl+tr; tm/=2; Build(v*2,tl,tm); Build(v*2+1,tm+1,tr); } int main(){ // freopen("apache.in","r",stdin); // freopen("apache.out","w",stdout); //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); ios_base::sync_with_stdio(0); // cin.tie(0); cin>>n>>k; for (int i=1;i<=n;i++){ cin>>ar[i]; } mins.push_back(make_pair(-2e9,n+1)); maxs.push_back(make_pair(2e9,n+1)); for (int i=0;i<=30;i++){ first_present[i]=n+1; first_absent[i]=n+1; } Build(1,1,n); for (int i=n;i>=1;--i){ for (int j=0;j<=30;j++){ if (ar[i]&(1<ar[i]){ int ps=mins.back().second; int ps_next=mins[mins.size()-2].second; UPD(ps,ps_next-1,ar[i]-mins.back().first); mins.pop_back(); } mins.push_back(make_pair(ar[i],i)); while (maxs.back().first