提交时间:2024-11-03 16:21:21
运行 ID: 34166
#pragma GCC optimize("Ofast,no-stack-protector") #include<algorithm> #include<cstdio> using namespace std; int T,LLN=-0x7f7f7f7f,LLX=0x7f7f7f7f; int fxy[500005][20][2],a[500005],a1; int n,k; inline int fd(int l,int r){ int k=__lg(r-l+1); return max(fxy[l][k][0],fxy[r-(1<<k)+1][k][0])-min(fxy[l][k][1],fxy[r-(1<<k)+1][k][1]); } int ck(int l){ int sum=0; for(int i=1;i+l-1<=n;i++){ if(fd(i,i+l-1)>=a1)sum++; if(sum>=k)return 1; } return 0; } int main(){ freopen("hi.in","r",stdin); freopen("hi.out","w",stdout); scanf("%d",&T); while(T--){ scanf("%d%d",&n,&k); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); fxy[i][0][0]=fxy[i][0][1]=a[i]; } for(int j=1;j<=__lg(n)+1;j++){ for(int i=1;i<=n-(1<<(j));i++){ fxy[i][j][0]=max(fxy[i][j-1][0],fxy[i+(1<<(j-1))][j-1][0]); fxy[i][j][1]=min(fxy[i][j-1][1],fxy[i+(1<<(j-1))][j-1][1]); } } a1=LLX; for(int i=1;i<=k;i++){ a1=min(a1,fd(i,i+n-k)); } int l=1,r=n-k+1; while(l<r){ int mid=(l+r)/2; if(ck(mid)){ r=mid; } else l=mid+1; } printf("%d %d\n",a1,l); } }