Q:P1873 [COCI 2011/2012 #5] EKO / 砍树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
import os
import sys
n, m = map(int,input().split())
lst = list(map(int,input().split()))
max_hi = max(lst)
min_hi = min(lst)
#对于高度higth的伐木量
def c_num(hight):
cur = 0
for i in range(n):
if hight < lst[i]:
cur += lst[i] - hight
return cur
def p(le,ri):
mid = (le + ri)//2
if le > ri:
#本问题的一直情况就是找不到一个高度恰好等于m
#那么此时就需要再大于m(ri) 和小于m(le)中取ri
return ri;
op = c_num(mid)
#缩小搜索边界
if op > m:
return p(mid+1,ri)
elif op < m:
return p(le,mid-1)
else:
return mid;
print(p(0,max_hi))