我有一个具有整数宽度的项目列表,可以将其解释为从左到右堆叠在一起的间隔。例如,假设项目是 A、B、C、D、E 和 F,宽度分别为 5、2、2、3、2 和 4:
项目下面的数字表示从列表开始的偏移量。
我正在寻找一种有效支持这些操作的数据结构,理想情况下少于 O(n):
- 从给定位置查找项目。例如,位置 11 的项目是 D,因为它跨越从 9 到 12,位置 14 的项目是 F,因为它从那里开始。
- 在任何两个现有项目之间插入一个项目,或删除任何现有项目。这应该改变后续项目的位置。例如,删除项目 E 应该导致项目 F 向左移动两个位置,因此它将从 12 跨越到 16。
我正在考虑使用类似于跳过列表的东西,每个级别都存储它包含在下面级别中的宽度,但我不太确定我可以获得哪些性能特征。
有什么建议么?