求助树状数组离线实现名次树kth的一种方法
  • 板块学术版
  • 楼主2020kanade
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/6/15 13:09
  • 上次更新2023/10/27 23:17:05
查看原帖
求助树状数组离线实现名次树kth的一种方法
456724
2020kanade楼主2022/6/15 13:09

手法还是先离散化开权值树状数组,对于kth操作的处理:

定义下标前缀 ipip 初始化为 00 ,之后初始下标 ii11 ,对下标 ii 进行倍增,直到 Cip+i>kC_{ip+i} \gt k 或下标越界,此时将下标退回上一次倍增后跳到的位置,将 ipip 加上这个数, kk 减去数组中下标对应的值,之后 ii 重置为 11 ,重复上述倍增过程直到无法继续倍增。(描述的可能有点偏差,见谅)

这样搞时间复杂度大概是单次  Θ(log2n)\ \Theta(log ^2n) 的?想了想,由于权值树状数组的特殊背景,倍增时跳到的点的值是非严格单调的,用二分加速倍增,复杂度大概是 Θ(lognloglogn)\Theta (\log n \cdot \log \log n) ,在 105n10910^5 \le n \le 10^9 的时候大概有 4<(loglogn)<54 \lt (\log \log n) \lt 5 ,可以看成常数。

求助:1.上面的算法是否能保证正确性?

2.若可保证正确性,上述时间复杂度证明是否正确,以及如何严格证明?

提前感谢各位

2022/6/15 13:09
加载中...