【发布时间】:2012-01-23 17:23:33
【问题描述】:
为了以下目的,我需要一个数据结构。假设我有一个数组a。最初,所有元素都设置为零。每当我要在位置p 更新具有正值new_value 的元素之一时,如果位置p old_value 的原始值不为零并且大于new_value,那么我需要更新从位置p 一直到数组末尾的所有非零元素。这里的更新意味着用那个位置的旧值和new_value之间的较小的值重置值。
例如,数组是:
[2, 0, 3, 0, 2, 1, 5, 0, 4, 0, 7]
假设位置2(从0 开始)的新值4 具有旧值3,我需要将数组更新为:
[2, 0, 3, 0, 2, 1, 4, 0, 4, 0, 4]
如果位置 2 的新值为 1,则结果数组为:
[2, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1]
是否有已知的数据结构可以有效地做到这一点?我需要很多这样的更新操作。
感谢您的建议。
【问题讨论】:
-
数组中的值有多大?
-
@izomorphius:这有关系吗?一般可以是 LONG_MAX。
-
@QiangLi:两个问题。与需要更新的频率相比,您需要多久访问一次元素?并且:除此修剪操作之外,您还需要以任何方式更改数组吗?
-
@ErikP.:我需要像更新一样经常访问元素。不,我只需要以这种方式重置/更新元素。
-
@QiangLi 对于我想到的第一个解决方案来说确实很重要。但是,对于我的回答中描述的那个,它没有。我相信笛卡尔树就是您要寻找的。span>
标签: arrays algorithm data-structures