较为简单的数据结构题。
考虑如下贪心过程:
ts=s
st=初始鱼的集合
ans=0
while(1){
p=st的小于s的最大数
如果st没有小于s的数
break
ans+=1
ts+=p
}
正确性是显然的。
然而这样子做时间复杂度并不正确。
如果鱼的重量为(100000,1,1,1,(100000))个(1)那么就会被卡。
显然可以使用线段树优化。
设在集合内的第一个大于(ts)的值为(y),则我们可以在线段树上二分加速寻找(st)的小于(s)的最大数的过程,具体可以看代码。
这样子看似还是很暴力。
然而每次线段树二分一次后,我们的值都会大于原值的两倍,所以时间复杂度为(O(nlog_2nlog_2V))