如果给定值小于当前值,则更新线段树

Update Segment tree if the given value is less than the current value

我一直在想是否只有当更新的新值小于当前值时才更新线段树

例如。 a[i]a[j] 是更新到 x

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

i<=k<=j

如何做到这一点?

延迟传播是我正在尝试的。

我从你的问题中了解到,如果新值小于该值,你正在尝试更新连续的数组段,如果是,则答案是段树。 步骤应该是:

1- 构造一个线段树大小的数组(数组元素为2*n -1 = n,由于线段树是完全二叉树,内部节点有n-1个),初始化为值大于最大可能值。

2-如果更新范围与线段树的线段范围完全匹配,现在更新线段树中线段处的值。 例如,您想从值为 4 的 2-4 段更新,然后遍历以在段树中找到确切的段,该段可以是 2-4 作为单个段,也可以分为两个段,比如 2 和 3-4,只需更新它段.

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

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