如果你写的是
modify(1, 1, dfn[x] - 1, z);
modify(1, dfn[x] + siz[x], n, z);
而不是
modify(1, 1, n, z);
modify(1, dfn[x], dfn[x] + siz[x] - 1, -z);
记得改为
if (dfn[x] - 1 >= 1) modify(1, 1, dfn[x] - 1, z);
if (dfn[x] + siz[x] <= n) modify(1, dfn[x] + siz[x], n, z);