社区讨论

关于树状数组初次接触者的疑问

P3372【模板】线段树 1参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@m66huhcz
此快照首次捕获于
2025/01/21 21:11
去年
此快照最后确认于
2025/01/22 08:10
去年
查看原帖
我一直不太能熟练掌握树状数组访问父/子节点的下标运算相关德数学知识,于是:
CPP
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;
}
就用一种类似于链式前向星的方式来存,以上是建树的代码
剩下的代码正在敲
疑问在于是否所有需要树状数组的题都能这么写

回复

3 条回复,欢迎继续交流。

正在加载回复...