操作
pushup
: 由子节点算父节点信息。
pushdown
: 把父节点的修改信息下传到子节点。懒标记
build
: 将一段区间初始化为线段树
modify
: 修改某一个点或者一个区间(需要懒标记)
query
: 查询一段区间的信息
除了最后一层,是一个满二叉树。
$mid=l+r>>1;$
$[l,mid],[mid+1,r],10—> [1,5],[6,10]$
用一维数组存每棵树;
编号是x:父节点x>>1,左节点x<<1,右节点x<<1|1
// build
void build(int u,int l,int r)
{
tr[u].l=l,tr[u].r=r;
if(l==r) return ;
int mid=l+r>>1;
build(u<<1,l,mid),build(u<<1|1,mid+1,r);
// pushup
}
// 查询
query()