POJ 2985 线段树+并查集

本文介绍了一种将并查集与线段树相结合的方法,用于高效处理涉及集合合并及查询的问题。通过构建特定的线段树结构,可以实时更新集合大小的变化,并快速查询指定排名的集合大小。

好久没有写过并查集了,没看以前的提交的代码,居然不假思索的将它们默写了下来,还算不错-_-

思路:建立一个线段树。每段记录group的大小在l与r之前的数目。初始时大小为1的组有N个,大小不为1的组均为0个。所以对于每段,若左边界为1,则其数据域为N,否则为0。以后不断合并group的过程中,设两个group的带大小分别为k1,k2。则线段树中包含k1或k2的结点数据域均减1,而包含k1+k2的结点数据域加1。因为合并后,原来大小为k1,k2的组已经不存在,取而代之的是新的大小为k1+k2的组。以后查询第k大的组则比较简单:在线段树上若未到达叶子结点,k若小于或等于右子树的数据域,则从右子树继续查询第k大的组;否则从左子树查询第k-s大的组,其中s为右子树的数据域,因为在右子树中已经有s个组比要查询的组大了,在左子树查询第k-s大的组即为所有组中第k大的组。

另外,此题也可用树状数组+二分+并查集解决。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值