关于线段树合并
  • 板块学术版
  • 楼主lisida0820
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/1/15 21:11
  • 上次更新2023/10/24 04:05:09
查看原帖
关于线段树合并
629192
lisida0820楼主2023/1/15 21:11

以下是两种线段树合并 mergemerge 函数的写法:

int merge(int x,int y,int l,int r){
	if (!x||!y)return x+y;
	int mid=(l+r)>>1,now=++cnt;
	tree[now].val=tree[x].val+tree[y].val;
	tree[now].l=merge(tree[x].l,tree[y].l,l,mid);
	tree[now].r=merge(tree[x].r,tree[y].r,mid+1,r);
	return now;
}
int merge(int x,int y,int l,int r){
	if (!x||!y)return x+y;
	if (l==r){
		tree[x].val+=tree[y].val;
		return x;
	}
	
	int mid=(l+r)>>1;
	tree[x].l=merge(tree[x].l,tree[y].l,l,mid);
	tree[x].r=merge(tree[x].r,tree[y].r,mid+1,r);
	tree[x].val+=tree[y].val;
	return x;
}

蒟蒻求问,这两种写法有什么区别呢?

2023/1/15 21:11
加载中...