A. 阿尔法

显然只要对位合并,最后查询不同的集合数就好了。

似乎听过一个叫倍增并查集的东西,然而考场上没有$yy$出来。

$f_{k,i}$表示点$i$以及$i$往后数$2^k$个元素共同被合并的祖先。

对于合并操作,直接用ST表的思路合并即可。

考虑最终的下传操作:

枚举倍增的次幂数,设$i$向后$2^k$个元素的祖先为$f$。

因为并查集美妙的性质,在$2^{k-1}$个元素意义下只要分别合并$i$与$f$,$i+2^{k-1}$与$f+2^{k-1}$就好了。

 

B. 狗

题意不清,就没什么好说的。

 

C. 集合

$n$个不同的数划分到若干个集合的方案数。

一行第二类斯特林数的和,即贝尔数。

有递推公式$B_{n+1}=\sum \limits_{i=0}^n \binom{n}{i}B_i$。

即钦定最后一个元素划分在最后一个集合中,选出一些元素划分为若干个集合,剩余的元素与最后一个元素划分在一起。

容易发现这个玩意是卷积式,分治FFT就好了,当然用生成函数搞一搞之后多项式求逆也是可以的,当然直接用二项式反演求一行斯特林数搞也是可以的。