如果给定值小于当前值,则更新线段树
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 个叶节点。
我一直在想是否只有当更新的新值小于当前值时才更新线段树
例如。 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 个叶节点。