fhq-treap玄学错误

P2596 [ZJOI2006] 书架

%%%wpy大佬
by VioletIsMyLove @ 2020-10-22 19:59:33


splits(rt,t1,t2,k)表示把以rt为根的树按照size分裂,前k个放在t1,后面的放在t2
by 破忆 @ 2020-10-22 20:00:31


因为是按照排名分裂,所以我们应该从大到小进行分裂,否则会是排名出现错误,就是说我们的排名是分裂之前的排名,而如果你不按照从后往前的顺序分裂的话,那么形成的新的子树的排名就不是原来的排名了。
by longdie @ 2020-10-22 20:05:16


@[破忆](/user/116251) 就是说如果你把前面的分裂了,那么后面的那棵子树的排名会变成新的排名,而不是原来完整的一棵树的排名,但是如果从后往前分裂的话就会避免这个问题
by longdie @ 2020-10-22 20:07:41


```cpp T.splits(rt,t1,t3,k); T.splits(t1,t1,t2,k-1); T.splits(t3,t3,t4,k+1); rt=T.merge(T.merge(t1,t3),T.merge(t2,t4)); ``` 换成 ```cpp T.splits(rt,t1,t3,k); T.splits(t1,t1,t2,k-1); T.splits(t3,t3,t4,1); rt=T.merge(T.merge(t1,t3),T.merge(t2,t4)); ```
by Gemini7X @ 2020-10-22 20:07:44


split t3的时候不应该只分裂一个吗?为啥是k+1
by MatrixCascade @ 2020-10-22 20:21:55


@[longdie](/user/330886) 楼主,是你让我深深地理解了‘人外有人,天外有天’这句话。谢谢侬!我终于找到了我想要的东西
by hzoi_liuchang @ 2021-03-04 17:12:04


|