Leafy理论alpha与实际alpha
  • 板块灌水区
  • 楼主ケロシブルアカ
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/7/31 20:24
  • 上次更新2024/7/31 21:59:12
查看原帖
Leafy理论alpha与实际alpha
511639
ケロシブルアカ楼主2024/7/31 20:24

一般是使用

const double alp = 1 - sqrt(2) / 2;
const double delp = alp / (1 - alp);

但是使用

const double alp = 0.2;
const double delp = 0.207583625;

会快一点

merge 如下:

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));
	}
}
2024/7/31 20:24
加载中...