Unverified Commit 9a18ba3b authored by Σndless's avatar Σndless Committed by GitHub
Browse files

修正更新操作增加的节点数量

原文描述的更新操作增加的节点数量有误。

考虑一个简单的情况,n=3,此时更新操作可能会产生三个节点 [1,3], [1,2], [1,1]。按照原来的公式计算出的结果是产生两个节点。
parent 5ceccf3d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -34,8 +34,8 @@
那么至此,该问题解决!(完结撒花)

关于空间问题,我们分析一下:由于我们是动态开点的,所以一棵线段树只会出现 $2n-1$ 个结点。  
然后,有 $n$ 次修改,每次增加 $\log{n}$ 个结点。那么最坏情况结点数会达到 $2n-1+n\log{n}$ ,那么此题的 $n \leq 10^5$ ,通过计算得到 $\lceil\log_2{10^5}\rceil = 17$ 。  
那么把 $n$ 和 $\log$ 的结果代入这个式子,变成 $2\times 10^5-1+17\times 10^5$ ,忽略掉 $-1$ ,大概就是 $19\times 10^5$ 。
然后,有 $n$ 次修改,每次至多增加 $\log{n}+1$ 个结点。那么最坏情况结点数会达到 $2n-1+n(\log{n}+1)$ ,那么此题的 $n \leq 10^5$ ,通过计算得到 $\lceil\log_2{10^5}\rceil+1 = 18$ 。  
那么把 $n$ 和 $\log$ 的结果代入这个式子,变成 $2\times 10^5-1+18\times 10^5$ ,忽略掉 $-1$ ,大概就是 $20\times 10^5$ 。

最后给一个忠告:千万不要吝啬空间!保守一点,直接上个 $2^5\times 10^5$ ,接近原空间的两倍(即 `n << 5` )。  
(较真的同学请注意,如果你真的很吝啬,可以自己造个数据输出一下结点数量,但是如果数据没造好把自己卡掉了就~~尴尬了~~赖你了)