我一直不太能熟练掌握树状数组访问父/子节点的下标运算相关德数学知识,于是:
struct tree{
int num;
int lid,rid;
int left,right;
};
tree leaf[1000005];int cnt=0;
int a[100005];
inline int build(int l,int r){
leaf[++cnt]={0,0,0,l,r};
if(l==r){leaf[cnt].num=a[l];return cnt;}
int mid=l+r>>1;
leaf[cnt].lid=build(l,mid);
leaf[cnt].rid=build(mid+1,r);
leaf[cnt].num=leaf[leaf[cnt].rid].num+leaf[leaf[cnt].lid].num;
return cnt;
}
就用一种类似于链式前向星的方式来存,以上是建树的代码
剩下的代码正在敲
疑问在于是否所有需要树状数组的题都能这么写