社区讨论
警示后人(如果你倍增 Subtask #1 有 TLE)
P3379【模板】最近公共祖先(LCA)参与者 4已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @mi4reehm
- 此快照首次捕获于
- 2025/11/18 23:59 3 个月前
- 此快照最后确认于
- 2025/11/20 04:04 3 个月前
把倍增数组大的一维开在第二维,小的一维开在第一维,可以大幅度降低常数,减少时间开销。
例如,若你的倍增数组是这样开的:
CPPconstexpr int N=5e5+5;
int f[20][N];
那么请改为这样开:
CPPconstexpr int N=5e5+5;
int f[N][20];
亲测有效:
这可能是最有效的防止倍增之正确算法被卡常的方法,比其他帖子所讲的输入输出优化、加
inline 来的有效的多。其他的倍增题目大抵是亦要如此,因为这么看来前者是一种大常数写法,应当避免。虽然发现了这点,但本蒟蒻不知道为什么这样就可以(也就是不了解其背后的机理),感觉做个小小的调换就能产生大大的效果,有点“玄学”,恳请有知道的大佬帮忙解释一下。
回复
共 7 条回复,欢迎继续交流。
正在加载回复...