社区讨论

Leafy理论alpha与实际alpha

灌水区参与者 3已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@lz9tmdqf
此快照首次捕获于
2024/07/31 20:26
2 年前
此快照最后确认于
2024/07/31 21:59
2 年前
查看原帖
一般是使用
CPP
const double alp = 1 - sqrt(2) / 2;
const double delp = alp / (1 - alp);
但是使用
CPP
const double alp = 0.2;
const double delp = 0.207583625;
会快一点
merge 如下:
CPP
int merge(int u, int v) {
	if(!u || !v) return u | v;
	if(sz[u] >= sz[v] * delp && sz[v] >= sz[u] * delp) {
		return up(u, v);
	}
	if(sz[u] >= sz[v]) {
		down(u);
		int l = ls[u], r = rs[u];
		if(sz[l] >= alp * (sz[u] + sz[v])) return merge(l, merge(r, v));
		down(r);
		return merge(merge(l, ls[r]), merge(rs[r], v));
	}
	else {
		down(v);
		int l = ls[v], r = rs[v];
		if(sz[r] >= alp * (sz[u] + sz[v])) return merge(merge(u, l), r);
		down(l);
		return merge(merge(u, ls[l]), merge(rs[l], r));
	}
}

回复

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

正在加载回复...