1 int n; 2 int ans[maxn*4];//开四倍空间 3 inline int ls(int p){return p<<1;}//左儿子 4 inline int rs(int p){return p<<1|1;}//右儿子
1 void build(ll p,ll l,ll r) 2 { 3 if(l==r){ans[p]=a[l];return ;} 4 //如果左右区间相同,那么必然是叶子节点啦,只有叶子节点是被真实赋值的 5 ll mid=(l+r)>>1; 6 build(ls(p),l,mid); 7 build(rs(p),mid+1,r); 8 //此处由于我们采用的是二叉树,所以对于整个结构来说,可以用二分来降低复杂度,否则树形结构则没有什么明显的优化 9 push_up(p); 10 //此处由于我们是要通过子节点来维护父亲节点,所以pushup的位置应当是在回溯时。 11 }
如对本文有疑问, 点击进行留言回复!!
【专题2:qt工程师】 之 【47.基于ffmpeg的播放器源码和可执行文件】
vs2017配置#include 「pylon/PylonIncludes.h」
#define swap(a,b) a^=b^=a^=b的问题 | 交换宏的错误
网友评论