%%%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