#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,m,a[N];
bool cheak(int x){ //如果刀片高度为x,是否可以获得>=m的木材长度
//暴力枚举
int sum=0;
for(int i=0;i<n;i++){
if(a[i]>x) {
sum+=a[i]-x;
if(sum>=m) return 1;
}
}
return 0;
}
int b_search(int l,int r){
while(l<r){
int mid=l+r+1>>1;
if(cheak(mid)) l=mid;
else r=mid-1;
}
return l;
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>a[i];
//二分查找左侧合法区间的右边界
//二分的是刀片H的高度
cout<<b_search(0,400000);
return 0;
}
P1873 [COCI 2011/2012 #5] EKO / 砍树
最新推荐文章于 2024-08-14 11:57:07 发布