没有权限号的同学可以到 BZOJ 3506 交一下……
同 OJ 1552
不管怎么翻转,如果我们只交换左右儿子的索引而不是信息,第 K 大的结点永远都是不变的。
所以我们可以先排一次序,并在按原序列插入时记录每个第 K 大的结点。
那么问题就转到如何求一个结点的名次。
我们从根结点到这个结点把翻转标记全部下传,然后依次加入左子树的结点数 + 1 并逐步跳到根结点。
然后区间翻转就是 FHQ Treap 一个简单的操作了……
代码:
1 |
|
没有权限号的同学可以到 BZOJ 3506 交一下……
同 OJ 1552
不管怎么翻转,如果我们只交换左右儿子的索引而不是信息,第 K 大的结点永远都是不变的。
所以我们可以先排一次序,并在按原序列插入时记录每个第 K 大的结点。
那么问题就转到如何求一个结点的名次。
我们从根结点到这个结点把翻转标记全部下传,然后依次加入左子树的结点数 + 1 并逐步跳到根结点。
然后区间翻转就是 FHQ Treap 一个简单的操作了……
代码:
1 | #include <cstdio> |
Related Issues not found
Please contact @Alpha1022 to initialize the comment