起首,我们从节点1开始,为区间的每个节点赋值。2、pushup操作
当我们遍历到节点k,当前节点有两种情况:
1、当前节点的l == r,那么当前节点就是叶子节点,我们对其赋相应的值之后,就直接返回,否则会陷入死循环
2、否则,当前节点就是非叶子节点,由于我们要找到叶子节点才能结束,所以我们对当前节点继续分裂,对左右子节点进行递归创建操作
pushup操作一般用于我们修改了u的子节点的值之后,对u进行Pushup操作,就可以在非常短的时间内对所有必要做出修改的节点的值进行修改3、query查询操作
query查询操作,求出[l, r]的最大值4、modify修改操作
此处有两种情况:
1、当前节点的左右范围完全包含在必要查询的区间中,那么我们就没必要再继续往下递归,直接返回当前节点的值就行了
2、否则,当前节点的范围没有完全包含到必要查询的区间中,再次对当前节点进行分裂 =>如果[]l, r]与左子树有交集,那么我们就在左子树的[l, mid]范围内求出一个max1;如果[l, r]与右子树有交集,我们在[mid+1, r]范围内求出一个max2,于是当前节点包含在[l, r]中那部分的最大值就是max(max1, max2),然后返回
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |