二分答案 50分
查看原帖
二分答案 50分
246331
mystic_qwq楼主2024/1/9 11:02

Record

#include<algorithm>
#include<cstdio>
using namespace std;
#define ll long long
int n,m,a[1000001],L=0,R,mid;
ll s[1000001];
bool chk(int h){
  const int pos=lower_bound(a+1,a+1+n,h+1)-a;
  return s[n]-s[pos-1]-1l*(n-pos+1)*h>=m;
}
main(){
  scanf("%d%d",&n,&m);
  for(int i=1;i<=n;++i)scanf("%d",a+i);
  sort(a+1,a+1+n),R=a[n];
  for(int i=1;i<=n;++i)s[i]=s[i-1]+a[i];
  int ans=0;
  while(L<R){
    mid=L+R>>1;
    if(chk(mid))
      L=mid+1,ans=max(mid,ans);
    else R=mid-1;
  }
  printf("%d",ans);
}
2024/1/9 11:02
加载中...