Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
35339 baka24 【S】T2 C++ 解答错误 90 63 MS 1464 KB 1191 2024-12-08 17:06:07

Tests(18/20):


#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-1)/2+1; 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; }


测评信息: