社区讨论
Leafy理论alpha与实际alpha
灌水区参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lz9tmdqf
- 此快照首次捕获于
- 2024/07/31 20:26 2 年前
- 此快照最后确认于
- 2024/07/31 21:59 2 年前
一般是使用
CPPconst double alp = 1 - sqrt(2) / 2;
const double delp = alp / (1 - alp);
但是使用
CPPconst double alp = 0.2;
const double delp = 0.207583625;
会快一点
merge 如下:
CPPint 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 条回复,欢迎继续交流。
正在加载回复...