关于平衡树是否可以用一些别的东西代替
查看原帖
关于平衡树是否可以用一些别的东西代替
1031934
捧着风的少年楼主2024/10/20 11:57

模版题

很显然,这个题十分弱智,就一个平衡树模版。

但是蒟蒻今天正在写另一道题时,想到了这个题的一些别的乱搞做法来完成这个问题。我知道极大可能有人已经提出,但是本蒟蒻只是来问一下是否可能可以实现。蒟蒻可能只能描述大体思路,但是细节可能是没有描述清楚的。

  • 观察 【说明/提示】,x107|x|\le10^7,于是本蒟蒻设想:

    • 使用一个数据结构维护一个序列 bb,长度为 2×1072\times 10^7,下标为 [107,107][-10^7,10^7]2×107×4÷10242=76(MB)2\times 10^7\times4\div1024^2=76(MB),不会爆掉空间。
    • 插入 xx 操作变为 bxb_x 自增,删除同理,变为自减。
    • 查询 xx 排名只需求出 b[1x1]b[1\to x-1] 的和 +1+1 即可。
    • 查询排名为 xx 的数只需二分最大 yy,使得 b[1y1]+1xb[1\to y-1]+1\le x 就行了。
    • 前驱后继同样的可以二分,怎么二分我想各位大佬也知道,就不具体说了。
  • 以上是一种设想,树状数组就可以实现了,理论复杂度 O(qlognlogai)O(q\log n\log a_i)

  • 另外,也可是使用 vector 简单实现,众所周知 insert,eraseinsert,erase 理论复杂度 O(n)O(n),但实际非常快,因此如果设他们为 O(t)O(t),则总复杂度为 O(q(logn+t))O(q(\log n+t))

2024/10/20 11:57
加载中...