您的位置:首页 > 其它

treap入门题。。

2017-08-22 14:24 127 查看

参考http://blog.csdn.net/u013480600/article/details/24379341

POJ 3481 Double Queue(Treap)

http://poj.org/problem?id=3481

题意:

每个顾客有个编号和优先级,银行每次可以添加顾客的要求进队列,且保证队列中当前任意顾客的编号和优先级都不同.银行可以执行先服务最大优先级的顾客或者先服务最小优先级的顾客操作.对于每个服务,输出顾客的编号.


分析:

直接构建Treap,插入节点的v值(顾客优先级)和节点的r值(随机函数rand获得)以及节点信息info(顾客编号),然后对于每个操作,先find找到最大v值的节点信息info,然后在delete即可.


———-

POJ 2985 The k-th LargestGroup(Treap+并查集)

http://poj.org/problem?id=2985

题意:

有N只猫,开始每只猫都是一个小组,下面要执行M个操作,操作0 i j 是把i猫和j猫所属的小组合并,操作1 k 是问你当前第k大的小组大小是多少. 且k<=当前的最大组数.


分析:

用并查集维护每只猫所属的集合,且维护集合中的节点数.

然后假设集合S1和集合S2合并,就在Treap中删除V=|S1|的节点并删除V=|S2|的节点.并插入V=|S1|+|S2|的节点.(注意如果|S1|==1,不用删除,因为Treap只保存了合并之后的组大小)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: