提交时间:2024-11-03 14:43:40

运行 ID: 34080

#include<bits/stdc++.h> using namespace std; const int N = 5e5+10; int T,n,k,ans,q[N],l=1,r,q2[N],l2=1,r2; int a[N]; template<typename type> inline void read(type &x) { x=0;bool flag(0);char ch=getchar(); while(!isdigit(ch)) flag=ch=='-',ch=getchar(); while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar(); flag?x=-x:0; } bool check(int x,int y){ l=1; r=0; l2=1; r2=0; int cnt=0; for(int i=1;i<=n*2;i++){ } if(cnt>=k) return true; else return false; } int main(){ //freopen("choose.in","r",stdin); //freopen("choose.out","w",stdout); read(T); while(T--){ ans=0; l=1; r=0; l2=1; r2=0; read(n); read(k); for(int i=1;i<=n;i++){ read(a[i]); } int X=2e9; for(int i=1;i<=n;i++){ while(l<=r&&q[l]<(i-(n-k+1)+1)){ l++; } while(l<=r&&a[q[r]]<=a[i]){ r--; } q[++r]=i; while(l2<=r2&&q2[l2]<(i-(n-k+1)+1)){ l2++; } while(l2<=r2&&a[q2[r2]]>=a[i]){ r2--; } q2[++r2]=i; if(i>=(n-k+1)){ X=min(X,a[q[l]]-a[q2[l2]]); } } printf("%d ",X); int L=1,R=n-k+1; while(L<=R){ int mid=(L+R)/2; if(check(mid,X)){ R=mid-1; ans=mid; } else L=mid+1; } printf("%d\n",ans); } return 0; }