void maketag(int u, int l, int r) { // 标记 #ifdef DEBUG std::cout << "maketag at " << u << " (" << l << ", " << r << ")\n"; #endif lzy[u] ^= 1; // w[u] = w[u] == r - l + 1 ? 0 : r - l + 1; 错误点 w[u] = r - l + 1 - w[u]; }
对于错误的代码
w[u] == r - l + 1
w[u] = 0
w[u] == 0
w[u] = r - l + 1
这两份代码不应该是等价的吗?