rt,该平衡树已通过 P6136,但是我不知道,也不认为其复杂度是正确的。
其方法是这样的:维护每个点一直向左孩子走的左链长度,和一直向右孩子走的右链长度。插入和删除的时候,如果左链长度比右链长度多至少 2,则将左孩子 rotate 只父节点。同上处理右孩子。
我想问一下这么做的时间复杂度是否是 O(nlogn),以及能否能像 Treap 一样将要删除的节点沿着比较长/短的链一路 rotate 到叶子节点来删除?(现在给出代码中的删除就是纯粹的不删去节点,只减 cnt)
然后就是附上 P6136 代码。