提交时间:2024-11-03 16:32:02

运行 ID: 34179

#pragma GCC optimize("Ofast,no-stack-protector") #include<algorithm> #include<cstdio> using namespace std; int T,LLN=-0x7f7f7f7f,LLX=0x7f7f7f7f; int fxy[20][500005],f2[20][500005],a[500005],a1; int n,k; inline int fd(int l,int r){ int k=__lg(r-l+1); return max(fxy[k][l],fxy[k][r-(1<<k)+1])-min(f2[k][l],f2[k][r-(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(){ scanf("%d",&T); while(T--){ scanf("%d%d",&n,&k); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); fxy[0][i]=f2[0][i]=a[i]; } for(int j=1;j<=__lg(n);j++){ for(int i=1;i<=n-(1<<(j-1));i++){ fxy[j][i]=max(fxy[j-1][i],fxy[j-1][i+(1<<(j-1))]); f2[j][i]=min(f2[j-1][i],f2[j-1][i+(1<<(j-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,mid; while(l<r){ mid=(l+r)/2; if(ck(mid)){ r=mid; } else l=mid+1; } printf("%d %d\n",a1,l); } }