提交时间:2024-11-03 14:15:42

运行 ID: 34067

#include<bits/stdc++.h> using namespace std; #define pii pair<int,int> #define fr first #define sc second #define mk make_pair #define pb push_back int read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=500010,N=20,inf=2000000000; int n,k,m,ans,a[MAXN],p[MAXN]; struct STB{ int f[N+2][MAXN],lg2[MAXN],ty; void build(int x){ty=x; for(int i=1;i<=n;i++)f[0][i]=ty*a[i],lg2[i]=i==1?0:lg2[i>>1]+1; for(int i=1;i<=N;i++) for(int j=1;j+(1<<i)-1<=n;j++){ f[i][j]=max(f[i-1][j],f[i-1][j+(1<<i-1)]); } } int qry(int l,int r){ int g=lg2[r-l+1]; return ty*max(f[g][l],f[g][r-(1<<g)+1]); } }MX,MN; int qry(int l,int r){ return MX.qry(l,r)-MN.qry(l,r); } int c[MAXN],cnt; bool check(int x){ int res=0; for(int i=1;i<=n-x+1;i++)res+=qry(i,i+x-1)>=m; return res>=k; } void slv(){ n=read(),k=read(); for(int i=1;i<=n;i++)a[i]=read(); MX.build(1),MN.build(-1); m=inf; for(int i=1;i<=k;i++){ m=min(m,qry(i,i+n-k)); } int l=1,r=n-k+1; while(l<r){ int mid=(l+r)>>1; if(check(mid))r=mid; else l=mid+1; } printf("%d %d\n",m,l); } signed main(){ int _=read();while(_--) slv(); return 0; }