手法还是先离散化开权值树状数组,对于kth操作的处理:
定义下标前缀 ip 初始化为 0 ,之后初始下标 i 为 1 ,对下标 i 进行倍增,直到 Cip+i>k 或下标越界,此时将下标退回上一次倍增后跳到的位置,将 ip 加上这个数, k 减去数组中下标对应的值,之后 i 重置为 1 ,重复上述倍增过程直到无法继续倍增。(描述的可能有点偏差,见谅)
这样搞时间复杂度大概是单次 Θ(log2n) 的?想了想,由于权值树状数组的特殊背景,倍增时跳到的点的值是非严格单调的,用二分加速倍增,复杂度大概是 Θ(logn⋅loglogn) ,在 105≤n≤109 的时候大概有 4<(loglogn)<5 ,可以看成常数。
求助:1.上面的算法是否能保证正确性?
2.若可保证正确性,上述时间复杂度证明是否正确,以及如何严格证明?
提前感谢各位