社区讨论
关于树状数组初次接触者的疑问
P3372【模板】线段树 1参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @m66huhcz
- 此快照首次捕获于
- 2025/01/21 21:11 去年
- 此快照最后确认于
- 2025/01/22 08:10 去年
我一直不太能熟练掌握树状数组访问父/子节点的下标运算相关德数学知识,于是:
CPPstruct 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;
}
就用一种类似于链式前向星的方式来存,以上是建树的代码
疑问在于是否所有需要树状数组的题都能这么写
回复
共 3 条回复,欢迎继续交流。
正在加载回复...