[1,2,6,9] 6
1+2
一种组合
lt =input()[1:].split(']')
l = list(map(int,lt[0].split(',')))
m = int(lt[1].split(',')[-1])
MAX = 1e9+7
n = len(l)
c = 0
l.sort()
r = n-1 # r不用每次都赋初始值!因为排序后,i增加,右边界肯定<=r。
#!!!!!!!!!!!!!!!!!二分+指针,nlogn
for i in range(n):
if i >= r:
break
# 二分寻找右边界 r为上次遍历的右边界。这次的右边界<=上次的右边界。
mid = r
while i < mid: # 为什么是<=,不是<, 因为r = (r + i) // 2时,i可能=r
if mid == n-1 and l[i]+l[mid] <= m: #注意mid==n-1的判断要写在前面,否则后面越界。
break
if mid < n-1 and l[i] + l[mid] <= m < l[i]+l[mid + 1]:#找到右边界 注意mid==n-1的判断要写在前面,否则后面越界。
break
elif l[i]+l[mid] <= m: ### 增大mid,右区间。
mid = (mid+1+r)//2 # 这里用到上次更新的右边界。