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

C 如果给定值小于当前值,则更新段树,c,data-structures,segment-tree,C,Data Structures,Segment Tree,我一直在想,如果更新的新值小于当前值,是否有可能更新段树 例如,a[i]到a[j]将更新为x if(a[k]>x) a[k]=x; i<=k<=j if(a[k]>x) a[k]=x; 我从您的问题中了解到,如果新值小于该值,您正在尝试更新数组的连续段,如果是,则答案是段树。 应采取以下步骤: 1-构造一个段树大小的数组(数组元素为2*n-1=n,由于段树是完整的二叉树,将有n-1个内部节点),并使用大于最大可能值的值初始化它 2-如果更新范围与分段树的分段范围完全匹配

我一直在想,如果更新的新值小于当前值,是否有可能更新段树

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

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

i<=k<=j
if(a[k]>x)
a[k]=x;

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

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

2-如果更新范围与分段树的分段范围完全匹配,则现在更新分段树中某个分段的值。 例如,如果要从2-4段更新值为4的段,则只需遍历以查找段树中的确切段,该段可以是2-4作为单个段,也可以分为两段(例如2和3-4),只需更新该段即可

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

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

试试看。