提交时间:2024-12-08 17:14:21

运行 ID: 35342

#include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define fr first #define sc second #define mk make_pair const int MAXN=300010; int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} int n,m,a[MAXN],b[MAXN],p[MAXN]; bool check(int x){ int p0=0,res=0,s0=0,s1=0; for(int i=1;i<=n;i++)p[i]=a[i]>=x,s0+=p[i]==0,s1+=p[i]==1; for(int i=1;i<=n;i++){ if(!p[i-1]&&p[i]){ int r=i; while(r<=n&&p[r])r++;r--; if((r-i+1)&1){ if(i&1)res+=p0?(p0-1)/2+1:0; else res+=p0/2; res+=s0-p0; } res+=s0*((r-i+1)/2); } else if(!p[i])p0++; } for(int i=1;i<=s1;i++)res+=(i-1)/2+1; return res>=m; } void slv(){ n=read(),m=read(); for(int i=1;i<=n;i++)a[i]=read(); int l=0,r=1e9; while(l<r){ int mid=(l+r+1)>>1; if(check(mid))l=mid; else r=mid-1; } printf("%lld\n",l); } signed main(){ int _=read();while(_--) slv(); return 0; }