Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34166 | hi_hi | 【S】T1 | C++ | 运行出错 | 0 | 0 MS | 200 KB | 1352 | 2024-11-03 16:21:21 |
#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); } }