#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int n;
const int N=1e6+5;
ll m,a[N];
bool check(ll mid){
ll sum=0;
for(int i=1;i<=n;i++){
if(a[i]-mid<=0){//如果该树高<=砍树高度,直接跳过
continue;
}
sum+=(a[i]-mid);
}
if(sum>=m){//当sum>=m说明砍树的高度要<=该mid
return true;
}
return false;
}
int main(){
cin>>n>>m;
ll maxx=0;
for(int i=1;i<=n;i++){
cin>>a[i];
maxx=max(maxx,a[i]);
}
sort(a+1,a+1+n);//先排序
ll l=1,r=maxx,ans=0;
while (r - l > 1) // 当右边界与左边界相差大于1时
{
int mid = (l + r) >> 1; // 取中间位置
if (check(mid)){ // 如果满足条件
ans=mid;//最后得到的mid就是答案
l = mid; // 更新左边界为mid
}
else{
r = mid; // 否则更新右边界为mid
}
}
cout<<ans<<endl;
return 0;
}
0 回复
0 转发
1 喜欢
1 阅读



