** 1908 - 伐木工 ---二分答案
** 来源:东方博宜oj oj.czos.cn
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,m,a[N];
bool check(long long mid)
{
long long sum=0;
for(int i=1;i<=n;i++)
{
if(a[i]>mid) sum+=a[i]-mid;
}
if(sum>=m) return true;
else return false;
}
int bsearch(long long l,long long r)
{
while(l<r)
{
long long mid=l+r+1>>1;
if(check(mid)) l=mid;
else r=mid-1;
}
return l;
}
int main()
{
cin>>n>>m;
long long t=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+1+n);
cout<< bsearch(0,a[n]);
return 0;
}
1908 - 伐木工 ---二分答案
于 2023-03-04 15:48:14 首次发布