《熊出没》中,光头强总是砍树,这天李老板又来催光头强砍树了。于是,光头强提着超强电锯,偷偷进入了狗熊岭......
这次光头强至少要给李老板上交 𝑘 米长的木材,幸运的是他发明的超强电锯一次可以从高度为 ℎ 的地方砍一排树,树上比 ℎ 高的那一部分就会被砍下来。光头强不敢从太低的地方砍树,因为那样很容易被发现,为了砍到至少 𝑘 米长的木材,能够选择的砍树的起始高度最高是多少?
第一行两个整数 𝑛 , 𝑘 ,表示一排有 𝑛 棵树,至少上交 𝑘 米的木材。
第二行 𝑛 个整数 𝑎 [𝑖]
,表示这排树的高度。
一行一个整数, 表示最低高度。
如果光头强无法砍够 𝑘 k米长,则输出"-1"。
输入数据 1 4 7 20 15 10 17
输出数据 15
对于 30 % 的数据, 1 ≤ 𝑛 ≤ 1000 , 1 ≤ 𝑘 ≤ 1000 , 1 ≤ 𝑎 𝑖 ≤ 1000
对于 100 % 的数据, 1≤n≤10 ^ 5 ,1≤k≤10^ 9 ,1≤a i ≤10 ^ 9 。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int a[maxn];
int n,k;
bool check(int x){
int size=0;
for(int i=0;i<n;i++){
if(a[i]-x>=0)size+=a[i]-x;
}
return size>=k;
}
int main(){
cin>>n>>k;
for(int i=0;i<n;i++)cin>>a[i];
int l=1,r=1e9+7;
while(l<r){
int mid=(l+r+1)>>1;
if(check(mid))l=mid;
r=mid-1;
}
if(check(l))cout<<l;
else cout<<"-1";
return 0;
}