我试图解决这个算法问题,我遇到了这个很好的解决方案:
“我们的想法是不对称地对待 a i、 b i和 c i。BIT 支持从 1 开始的键间隔的最小查询。我们使用 c i作为值和 b i作为键。这些按增加 a 的顺序插入i . 这样,对于每个 a i ,数据结构允许查询 c j的最小值(可能是 ∞ )在 [1..b i中的 b j和 a j < a i。我们有 c j < c i当且仅当参赛者 i 不优秀时。”
现在我很难理解这个解决方案。
这是我对这个解决方案的理解:我知道二叉索引树用于回答查询,例如在数组中查找区间的总和,它还支持元素更新。它分别以 O(logn) 时间复杂度执行这两项操作。现在这个解决方案说我们用键作为 c i和值作为 b i构建 BIT ,这基本上是 b i是每个节点的附加值。现在我们在树中插入i值增加的元素,这就是我失去控制的地方。我们插入节点的顺序以及该部分后面的语句所说的内容有什么关系,我不知道。
请帮助我了解此解决方案的含义。