警示后人||关于本题常数
查看原帖
警示后人||关于本题常数
743014
_H17_楼主2024/9/5 22:33

如果你使用结构体存储节点(也许也适用于别的?)

那么你存储节点的熟读大小是 n×2+(⌈log⁡n⌉+1)×qn\times 2+(\lceil\log n\rceil+1)\times q 由于 n,qn,q 同阶,则可以化简为 n×(3+⌈log⁡n⌉)n\times (3+\lceil\log n\rceil) 当 n=106n=10^6 时,得到 n×(3+20)=23×nn\times (3+20)=23\times n。

此时如果做“开大数组避免错误”的话可能会导致 TLE,为什么?

内存应尽量连续访问,不连续的话会浪费部分时间在计算机切换变量上,此时如果数组开小的话:

若节点(线段树里的)地址是 xx,其他辅助数组地址是 yy,则若定义顺序依次是 x,yx,y,那么你使用 xx 再使用 yy 最多跳了整个线段树数组,也就是 23×10623\times 10^6。

但是如果你开大数组,比如开了 32×10632\times 10^6,此时常数过大会超时。

2024/9/5 22:33
加载中...