Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34156 hi_hi 【S】T1 C++ 解答错误 0 218 MS 160404 KB 1418 2024-11-03 16:08:19

Tests(0/10):


#include<bits/stdc++.h> using namespace std; long long T,LLN=-0x3f3f3f3f3f3f3f3f,LLX=0x3f3f3f3f3f3f3f3f; long long f[500005][20][2],a[500005],a1,a2; long long n,k; long long fd(long long l,long long r){ long long k=__lg(r-l+1); return max(f[l][k][0],f[r-(1<<k)+1][k][0])-min(f[l][k][1],f[r-(1<<k)+1][k][1]); } long long ck(long long l){ long long 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("%lld",&T); while(T--){ scanf("%lld%lld",&n,&k); for(int i=1;i<=n;i++){ for(int j=0;j<=__lg(n)+1;j++){ f[i][j][0]=LLN; f[i][j][1]=LLX; } scanf("%lld",&a[i]); f[i][0][0]=f[i][0][1]=a[i]; } for(int j=1;j<=__lg(n)+1;j++){ for(int i=1;i<=n-(i<<(j-1));i++){ f[i][j][0]=max(f[i][j-1][0],f[i+(1<<(j-1))][j-1][0]); f[i][j][1]=min(f[i][j-1][1],f[i+(1<<(j-1))][j-1][1]); } } a1=LLX,a2=0; for(int i=1;i<=n;i++){ a1=min(a1,fd(i,i+n-k)); } long long l=1,r=n; while(l<r){ long long mid=(l+r)/2; if(ck(mid)){ r=mid; } else l=mid+1; } printf("%lld %lld\n",a1,l); } }


测评信息: