考虑一个简单的问题,维护一个数组,支持每次修改一个数的值,保证每时每刻每个数都为非负数。每次查询求第一个前缀和≥ k k k的下标。
对于修改,可以用树状数组、线段树等数据结构维护。
二分查找 可以在 [ l , r ] [l,r] [l,r]的范围上二分答案, m i d = ⌊ l + r 2 ⌋ mid = \lfloor \frac{l+r}{2} \rfloor mid=⌊2l+r⌋,验证 m i d mid mid的前缀和是否大于 k k k,并调整 m i d mid mid。时间复杂度 O ( l o g 2 2 n ) O(log^2_2n)