Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34142 | hi_hi | 【S】T1 | C++ | 解答错误 | 0 | 275 MS | 82288 KB | 1223 | 2024-11-03 15:43:54 |
#include<bits/stdc++.h> using namespace std; long long T,LLN=-0x3f3f3f3f3f3f3f3f,LLX=0x3f3f3f3f3f3f3f3f; long long f[500005][20],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],f[r-(1<<k)+1][k]); } long long ck(long long l){ long long sum=0; for(int i=1;i+l<=n;i++){ if(fd(i,i+l-1)>=a1)sum++; } return sum>=k; } int main(){ // freopen("hi.in","r",stdin); // freopen("hi.out","w",stdout); scanf("%lld",&T); while(T--){ scanf("%lld%lld",&n,&k); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); f[i][0]=a[i]; } for(int j=1;j<=__lg(n);j++){ for(int i=1;i+(i<<j)<=n;i++){ f[i][j]=max(f[i][j-1],f[i+(i<<(j-1))][j-1]); } } a1=LLN,a2=0; for(int i=1;i<=n;i++){ a1=max(a1,fd(i,i+n-k)); } long long l=1,r=n; while(l<=r){ long long mid=(l+r)/2; if(ck(mid)){ a2=mid; r=mid-1; } else l=mid+1; } printf("%lld %lld\n",a1,a2); } }