题目:


代码:
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[100000005];
bool jltm(int x){
    long long sum=0;
    for(int i=1;i<=n;i++){
        if(a[i]>x) sum=sum+a[i]-x;
    }//计算此时锯片高度砍掉的木材
    if(sum>=m) return 1;
    else return 0;
}//写一个函数判断此时锯片高度砍掉的木材大于等于Mirko需要的木材吗?
int main(){
    long long l=0,mid,r;//设最低高度和最高高度以及中间量
    scanf("%lld %lld",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%lld",&a[i]);
        r=max(r,a[i]);
    }//输入以及找树木最高值
    while(l<r){
        mid=(l+r+1)/2;
        if(jltm(mid)) l=mid;
        else r=mid-1;
    }//二分锯片高度
    printf("%lld",l);//输出
    return 0;
}


















