要求维护一个序列(序列中的每个元素都有一个编号,终生不变),可以指定某个元素并将其放到序列开头、序列结尾,或与其前驱或后继交换位置。支持询问某个编号的元素位置和某个位置的元素编号。
用平衡树来实现此题,需要特殊考虑的就是编号问题。由于平衡树中要完成终生不变的编号,还有循编号来查找元素,直接建立tag并不能有效地解决问题。不妨利用平衡树内部的Key来维护位置关系,然后外部开两个数组来双向地记录Key与Num的对应关系,维护时注意修改就可以了。
具体地,在实现每种操作时,我们对相应参量作对应的调整。
- 要求置顶(底)时,则令 NewKey=Max/MinKeyInTree+(−1