//这样就正确
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;
明明是等式呀
那么应该都正确
为啥换算后就错了
*/