题目描述
马上就要复赛了,徐老师最近刚复习了 并查集 这个知识点
在并查集中,如果使用路径压缩,那时间复杂度总体将会是 O(n),非常高效
如果还能够学会进一步较难的优化——启发式合并之后,并查集的每个操作平均时间仅为 O(α(n)),所有操作几乎可以当做 O(1) 使用(当然,对于普及组的选手而言,能够熟练运用路径压缩即可)
其中 α 为阿克曼函数的反函数,即为最大的整数 m 使得 akm(m,m)⩽n。
现在徐老师想要具体的估计一下对于不同数据范围的 n,使用路径压缩+启发式合并优化后的并查集的时间复杂度是多少
P.S.阿克曼(Ackermann)函数 akm(m,n) 中,m,n 定义域是非负整数,函数值定义为:
- m=0 时:akm(m,n)=n+1。
- m>0 且 n=0 时:akm(m,n)=akm(m−1,1)。
- m>0 且 n>0 时:akm(m,n)=akm(m−1,akm(m,n−1))。
输入格式
本题采用多组测试数据,输入第一行包含一个整数 T 表示数据组数
接下来 T 行,每行包含一个整数 n 表示这组测试数据给出的询问
输出格式
对于每组测试数据,输出一个整数表示对应的 α(n) 的值
数据范围
数据点编号 |
T |
n |
1 |
T≤103 |
1≤n≤10 |
2 |
1≤n≤100 |
3 |
1≤n≤1018 |
4∼5 |
T≤106 |
样例输入1
4
2
3
45
678
样例输出1
0
1
2
3