待定:
二.线段树之应用
线段树应用场景:区域和检索
例题1--307. 区域和检索 - 数组可修改,给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。update(i, val) 函数可以通过将下标为 i 的数值更新为 val,从而对数列进行修改。
基本思路:区域和很典型线段树的应用,利用线段树可以在在o(lg(n))的时间复杂度内完成
- 线段树的构建,大小是2*n,下标从1开始,是一颗完全二叉树,当前节点cur的左节点为leftnode,右节点为rightnode,则leftnode=2*cur,rightnode=2*cur+1,
- 线段树的叶子节点,左叶子节点为2*i,是偶数,右叶子节点是2*i+1,是奇数
- 区域求和[L,R]:l=L+n,r=R+n,直接找到对应的叶子节点
- 如果左边界l是奇数,说明是右叶子节点,直接相加,然后加一,移动到相邻的左叶子节点;
- 如果左边界l是偶数,说明是左叶子节点,很可能是左右叶子节点相加,向上到父节点
- 如果右边界r是奇数,说明是右叶子节点,很可能是左右叶子节点相加,向上到父节点
- 如果右边界r是偶数,说明