提交时间:2024-11-03 15:00:35

运行 ID: 34102

#include<bits/stdc++.h> using namespace std; int n,k; int st[500010][30][2]; inline int query(int i,int j){ int lg=__lg(j); return max(st[i][lg][0],st[i+j-(1<<lg)][lg][0])-min(st[i][lg][1],st[i+j-(1<<lg)][lg][1]); } inline bool check2(int len,int x){ int sum=0; for(int i=1;i<=n-len+1;i++){if(query(i,len)>=x)sum++;} return sum>=k; } inline int calc(int len){ int sum=0; int res=2147483647; for(int i=1;i<=n-len+1;i++){res=min(res,query(i,len));} return res; } signed main(){ freopen("choose.in","r",stdin); freopen("choose.out","w",stdout); ios::sync_with_stdio(0); int _; cin>>_; while(_--){ cin>>n>>k; for(int i=1;i<=n;i++){ cin>>st[i][0][0]; st[i][0][1]=st[i][0][0]; } int L=__lg(n); for(int i=1;i<=L;i++){ for(int j=1;j+(1<<i)-1<=n;j++){ st[j][i][0]=max(st[j][i-1][0],st[j+(1<<(i-1))][i-1][0]); st[j][i][1]=min(st[j][i-1][1],st[j+(1<<(i-1))][i-1][1]); //cout<<j<<' '<<i<<' '<<st[j][i][0]<<' '<<st[j][i][1]<<endl; } } int l=1,r=n-k+1,ans=calc(n-k+1),mn; while(l<=r){ int len=l+r+1>>1; int ll=l,rr=r; // cout<<"len"<<len<<' '<<x<<' '<<check2(len,x)<<endl; if(check2(len,ans)){ r=len-1; mn=len; }else{ l=len+1; } if(ll==l&&rr==r)break; } while(check2(mn-1,ans))mn--; cout<<ans<<' '<<mn<<endl; } return 0; }