两个 add 操作插入的路径可能共享一部分前缀,这些前缀节点只会建一次。
一个线段树中,操作次数越多重复的节点就越多,实际新建的结点就越少,所以我们要使每个线段树的操作数尽可能的小。
总共会修改4*n个节点,假设原树上每个节点都刚好修改四次,每次颜色都不同,那么原树上每个节点对应的线段树都会增加logn + logn - 1 + (logn - 2) * 2个点。
- 第一次加点:log(n) 个新节点
- 第二次加点:log(n) - 1 个新节点(因为根重合)
- 第三次:log(n) - 2 个
- 第四次:log(n) - 2 个(路径重合)
n = 1e5时,18 + 17 + 16 * 2 = 67个节点,所以每个线段树增加67个节点,总增加节点为67 * N = 6.7*10^6。
是否可能达到这种极端情况?