一个小疑惑求助
查看原帖
一个小疑惑求助
527629
iqer楼主2021/10/5 21:54
//这样就正确
void push_down(int l, int r, int t){
    if(add[t]){
        int mid = (l + r) >> 1;
        tree[t << 1] += (mid - l + 1) * add[t];
        tree[t << 1 | 1] += (r - mid) * add[t];
        add[t << 1] += add[t];
        add[t << 1 | 1] += add[t];
        add[t] = 0;
    }
}
//这样就错误
void push_down(int l, int r, int t){
    if(add[t]){
        tree[t << 1] += (r - l + 2) / 2  * add[t];
        tree[t << 1 | 1] += (r - l) / 2 * add[t];
        add[t << 1] += add[t];
        add[t << 1 | 1] += add[t];
        add[t] = 0;
    }
}
/* mid = (l + r) / 2
	mid - l + 1 = (r - l + 2) / 2;
    r - mid = (r - l) / 2;
    明明是等式呀
    那么应该都正确
    为啥换算后就错了
*/
2021/10/5 21:54
加载中...