社区讨论

警示后人(如果你倍增 Subtask #1 有 TLE)

P3379【模板】最近公共祖先(LCA)参与者 4已保存回复 7

讨论操作

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

当前回复
7 条
当前快照
1 份
快照标识符
@mi4reehm
此快照首次捕获于
2025/11/18 23:59
3 个月前
此快照最后确认于
2025/11/20 04:04
3 个月前
查看原帖
把倍增数组大的一维开在第二维,小的一维开在第一维,可以大幅度降低常数,减少时间开销。
例如,若你的倍增数组是这样开的:
CPP
constexpr int N=5e5+5;
int f[20][N];
那么请改为这样开:
CPP
constexpr int N=5e5+5;
int f[N][20];
亲测有效:
这可能是最有效的防止倍增之正确算法被卡常的方法,比其他帖子所讲的输入输出优化、加 inline 来的有效的多。
其他的倍增题目大抵是亦要如此,因为这么看来前者是一种大常数写法,应当避免。虽然发现了这点,但本蒟蒻不知道为什么这样就可以(也就是不了解其背后的机理),感觉做个小小的调换就能产生大大的效果,有点“玄学”,恳请有知道的大佬帮忙解释一下。

回复

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

正在加载回复...