如果给定值小于当前值

时间:2015-07-10 10:34:04

标签: c data-structures segment-tree

我一直想知道只有在更新的新值小于当前值时才能更新分段树。

例如。 a[i]a[j]将更新为x

if(a[k]>x)
  a[k]=x;

i<=k<=j

如何做到这一点?

懒惰传播是我正在尝试的。

1 个答案:

答案 0 :(得分:1)

我从你的问题中理解的是,如果新值小于该值,你试图更新连续的数组片段,如果是,那么答案就是片段树。 步骤应该是:

1-构造一个段树大小的数组(2 * n -1 = n表示数组元素,而段树是完整的二叉树,将有n-1个内部节点)并用更大的值初始化它超过最大可能值。

2-如果更新范围与分段树的分段范围完全匹配,则更新分段树中某个分段的值。    例如,您想要从值为4的2-4段更新然后只是遍历以找到段树中的精确段,可以是2-4作为单个段,或者可以分为两个,例如2和3-4,只需更新段。

3-重复步骤2进行所有更新(如果值小于段树中的当前值,则更新)。

4-完成所有更新后,创建一个解析器,它将从上到下遍历整个段树,并将最小权重降低到n个叶子节点。