关于8倍空间无法通过的解释
查看原帖
关于8倍空间无法通过的解释
1391256
LTTXiaochuan楼主2025/7/14 12:20

如果您的代码需要开到 16 倍空间,大抵是因为:

void pushup(int p,int pl,int pr){
    if(tag[p]) length[p]=xx[pr]-xx[pl];  
    //else if(pl+1==pr) length[p]=0;
    else length[p]=length[ls(p)]+length[rs(p)];
}

由于没有对叶子节点进行判断(被注释的那一行),可能访问到垃圾内存。

Q:为什么 pl+1==pr 为叶子结点,而不是 pl==pr

A:检查您的区间表示法是左闭右开法还是两边都闭。由于 lower_bound 查找的是不小于这个值的位置,所以扫描线的离散化查询一般用左闭右开更方便,此时子节点判断就是 pl+1==pr

2025/7/14 12:20
加载中...