先%一下zkw。sto zkw orz
zkw线段树是一个改良版的线段树。其功能与传统线段树相同,也是用于维护区间信息。但是zkw线段树有很多优点:
- 代码简短;
- 纯天然非递归;
- 常数小(尤其在差分区间更新时)
特点:堆式储存,找父亲只需右移一位。
建树
和线段树一样,父节点左移一位为左儿子,再+1(或者|1)为右儿子。
我们知道,最底层实际上存的是原数组,同时由于堆式储存的特性,序号也是顺序排列的,也就是说当我们需要查询或修改时,只需在原数组序号上加上一个数,设为m吧。
for(m=1;m<n;m<<=1);
实际上,m为最底层所有节点的父节点总数,所以只需设m为1,不断左移,当m>=n时停止。
zkw线段树建树的方式就是首先输入叶子结点的信息然后再一路向上传递信息,直到根结点。
单点修改
比较 \(easy\)。