我一直想知道只有在更新的新值小于当前值时才能更新分段树。
例如。 a[i]
到a[j]
将更新为x
if(a[k]>x)
a[k]=x;
i<=k<=j
如何做到这一点?
懒惰传播是我正在尝试的。
答案 0 :(得分:1)
我从你的问题中理解的是,如果新值小于该值,你试图更新连续的数组片段,如果是,那么答案就是片段树。 步骤应该是:
1-构造一个段树大小的数组(2 * n -1 = n表示数组元素,而段树是完整的二叉树,将有n-1个内部节点)并用更大的值初始化它超过最大可能值。
2-如果更新范围与分段树的分段范围完全匹配,则更新分段树中某个分段的值。 例如,您想要从值为4的2-4段更新然后只是遍历以找到段树中的精确段,可以是2-4作为单个段,或者可以分为两个,例如2和3-4,只需更新段。
3-重复步骤2进行所有更新(如果值小于段树中的当前值,则更新)。
4-完成所有更新后,创建一个解析器,它将从上到下遍历整个段树,并将最小权重降低到n个叶子节点。