我在书中找到了这个:
Design a data structure for maintaining dynamic sequence x_1, x_2,... , x_n
which provides operations:
Insert(a,i) - inserts a as x_i, indexes from i+1 to n go up by 1
Delete(i) - deletes x_i, indexes from i+1 to n go down by 1
Find(i) - returns element x_i
Sum_even() - returns sum of the elements with even indexes
序列是动态的,所以我想使用 AVL 树来保留它。所以我认为我可以使用标准技巧来查找、删除和插入 - 只需保留以该节点为根的子树的每个节点大小。然后我可以轻松地导航树以在 O(log n) 时间内找到第 i 个元素。然后按顺序给我:x_1,x_2,...,x_n。
但是对于 Sum_even() 我可能还应该在每个节点中包含具有偶数和奇数索引的元素的总和。虽然在插入或删除时很难更新。它应该如何工作,有人可以帮忙吗?