考虑一下正确性:在递归树上任意一点,任意一个查询操作,所有对其的影响一定会计入到树状数组中。分情况讨论。对于最开始的初始化操作,所有在\([L,R]\)的操作肯定都在当前操作序列的最前面。对于后面的修改操作,如果是\(-1\)标记,那么其对应的添加操作一定也在当前操作序列里面,而且在这个\(-1\)操作前面,所以对于任意一个元素,既不会漏记,也不会重记(任意一个元素的操作序列一定是+1 -1 +1 -1 ... +1 -1 +1
)
举一个例子,假设当前值域区间为\([5,10]\),树状数组为空。某一位数字的值是\(7\),而且其所经过的修改为\(6\rightarrow 3\rightarrow 8\rightarrow 7\),那么其操作序列就是+1 -1 +1 -1 +1 -1 +1
;对于当前操作序列,其包含一个子集为+1 -1 +1 -1 +1
,可以知道\(7\)不会漏记