Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34181 | hi_hi | 【S】T1 | C++ | 运行超时 | 90 | 1000 MS | 75340 KB | 1628 | 2024-11-03 16:33:50 |
#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; } #define getchar getchar_unlocked inline int read() { int x = 0; bool fl = 0; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') fl = 1; c = getchar(); } while (c >= '0' && c <= '9') { x = (x << 1) + (x << 3) + (c ^ 48); c = getchar(); } return fl ? -x : x; } 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); } }