模版题。
很显然,这个题十分弱智,就一个平衡树模版。
但是蒟蒻今天正在写另一道题时,想到了这个题的一些别的乱搞做法来完成这个问题。我知道极大可能有人已经提出,但是本蒟蒻只是来问一下是否可能可以实现。蒟蒻可能只能描述大体思路,但是细节可能是没有描述清楚的。
-
观察 【说明/提示】,∣x∣≤107,于是本蒟蒻设想:
-
- 使用一个数据结构维护一个序列 b,长度为 2×107,下标为 [−107,107],2×107×4÷10242=76(MB),不会爆掉空间。
-
- 插入 x 操作变为 bx 自增,删除同理,变为自减。
-
- 查询 x 排名只需求出 b[1→x−1] 的和 +1 即可。
-
- 查询排名为 x 的数只需二分最大 y,使得 b[1→y−1]+1≤x 就行了。
-
- 前驱后继同样的可以二分,怎么二分我想各位大佬也知道,就不具体说了。
-
以上是一种设想,树状数组就可以实现了,理论复杂度 O(qlognlogai)。
-
另外,也可是使用 vector 简单实现,众所周知 insert,erase 理论复杂度 O(n),但实际非常快,因此如果设他们为 O(t),则总复杂度为 O(q(logn+t))