定义宏时一定不能写成这样:
#define gettag(u, l, r, a) \ node[u].add += a; \ node[u].sum += a * (r - l + 1)
当传入 l = mid + 1 时会出现 node[u].sum += a * (r - mid + 1 + 1) 的现象。需改为:
l = mid + 1
node[u].sum += a * (r - mid + 1 + 1)
node[u].sum += a * (r - (l) + 1)