计蒜客 ICPC南京网络赛 Set(字典树 + 合并 + lazy更新)

 

 

 

大致题意:n个集合,你要进行m个操作。总共有3种操作。第一种,合并两个集合x和y。第二张,把特定的集合里面所有的数字加一。第三种,询问在某个集合里面,对于所有数字对2的k次方取模后,有多少个数字等于x。

首先,合并的话实在是有太多的方式,大部分数据结构的启发式合并包括set都可以。但是主要是第三个,所有数字对2的k次方取模,然后看结果有多少个数字等于x。仔细想想这个取模,不难发现,其实就是询问,一个集合里面,在二进制下,后k位x的数字有多少个。询问与二进制和位数有关,很容易想到用字典树。

字典树的合并比较容易写,当一棵树有某个儿子,而另一个没有的时候,直接把没有的儿子指向有的,其余情况暴力合并即可。问题的关键在于这个集合整体加一怎么处理。我们考虑加一对于一个数字来说会有什么样的影响。由于我实在二进制下存储,那么我考虑影响当然也

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值