大致题意:n个集合,你要进行m个操作。总共有3种操作。第一种,合并两个集合x和y。第二张,把特定的集合里面所有的数字加一。第三种,询问在某个集合里面,对于所有数字对2的k次方取模后,有多少个数字等于x。
首先,合并的话实在是有太多的方式,大部分数据结构的启发式合并包括set都可以。但是主要是第三个,所有数字对2的k次方取模,然后看结果有多少个数字等于x。仔细想想这个取模,不难发现,其实就是询问,一个集合里面,在二进制下,后k位x的数字有多少个。询问与二进制和位数有关,很容易想到用字典树。
字典树的合并比较容易写,当一棵树有某个儿子,而另一个没有的时候,直接把没有的儿子指向有的,其余情况暴力合并即可。问题的关键在于这个集合整体加一怎么处理。我们考虑加一对于一个数字来说会有什么样的影响。由于我实在二进制下存储,那么我考虑影响当然也