社区讨论

警示后人 - 如果你随机 MLE

P5494【模板】线段树分裂参与者 2已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mkkydhdn
此快照首次捕获于
2026/01/19 17:18
上个月
此快照最后确认于
2026/01/23 12:55
4 周前
查看原帖
你的区间求和可能写成了这样:
CPP
ll query1(int p,int l,int r,int ql,int qr){
	if(ql<=l&&r<=qr){
		return tree[p].sum;
	}
	int mid=(l+r)>>1;
	ll res=0;
	if(ql<=mid){
		res+=query1(tree[p].ls,l,mid,ql,qr);
	}
	if(qr>mid){
		res+=query1(tree[p].rs,mid+1,r,ql,qr);
	}
	return res;
}
但正是这个 res 成功使你 MLE 了,应该写成这样:
CPP
ll query1(int p,int l,int r,int ql,int qr){
	if(l>qr||r<ql){
		return 0ll;
	}
	if(ql<=l&&r<=qr){
		return tree[p].sum;
	}
	int mid=(l+r)>>1;
	return query1(tree[p].ls,l,mid,ql,qr)+query1(tree[p].rs,mid+1,r,ql,qr);
}

回复

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

正在加载回复...