提交时间:2024-11-03 14:08:25
运行 ID: 34058
#include<bits/stdc++.h> #define pii pair<int,int> #define mk make_pair #define fi first #define se second #define gc getchar using namespace std; const int N=5e5+10; int a[N];int n; void cmn(int &a,int b){ if(b<a) a=b; }void cmx(int &a,int b){ if(b>a) a=b; }int ans=0;int k; inline int read(){ int t=0,f=1;char ch=gc(); while(!(ch>='0'&&ch<='9')){ if(ch=='-') f=-1;ch=gc(); }while((ch>='0'&&ch<='9')) t=t*10+ch-'0',ch=gc(); return t*f; } int tmp[N]; pii c[2][N*2]; int tl[2],tp[2]; int st1[22][N*2],st2[22][N*2];int lg[N*2]; void bdst(){ memset(st1,0xc0,sizeof(st1)); memset(st2,0x3f,sizeof(st2)); for(int i=1;i<=n;i++) st1[0][i]=a[i],st2[0][i]=a[i]; for(int j=1;j<=19;j++){ for(int i=1;i<=n;i++){ st1[j][i]=max(st1[j-1][i],st1[j-1][i+(1<<(j-1))]); st2[j][i]=min(st2[j-1][i],st2[j-1][i+(1<<(j-1))]); } }for(int i=2;i<=n;i++) lg[i]=lg[i/2]+1; }int qry(int l,int r){ int len=r-l+1; return max(st1[lg[len]][l],st1[lg[len]][r-(1<<lg[len])+1])-min(st2[lg[len]][l],st2[lg[len]][r-(1<<lg[len])+1]); } inline int calc(int x){ int res=0x7f7f7f7f; for(int i=x;i<=n;i++) cmn(res,qry(i-x+1,i)); return res; }inline int calc2(int x,int s){ tl[0]=1,tl[1]=1,tp[0]=0,tp[1]=0; int cnt=0,fla=0; for(int i=x;i<=n;i++){ int val=qry(i-x+1,i); if(val>=s) cnt++; } return cnt; }inline void slv(){ n=read(),k=read(); //cerr<<n<<endl; for(int i=1;i<=n;i++) a[i]=read(); bdst(); int l=1,r=n-k+1; ans=calc(r); while(l<r){ //cout<<l<<' '<<r<<endl; int mid=(l+r)/2; if(calc2(mid,ans)>=k) r=mid; else l=mid+1; }printf("%d %d\n",ans,l); } int main(){ int t=read();while(t--) slv(); return 0; }