提交时间:2024-11-03 15:43:54

运行 ID: 34142

#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); } }