In practice, the amortized O(α(n)) data structure is good for every case. But if I want to be pedantic and require each operation to be under a certain time complexity, what's the currently known best complexity, and is it optimal?
The normal disjoint set implementation with recorded rank (height before optimization) could make it into O(log n). One could also get O(log n) using trees or heaps. But could it be better?
One possible use case is, if I found an algorithm mostly in O(log log n) but also has a disjoint set operation, it seems awkward to say it's amortized O(log log n) but at most O(log n) for each operation. Much better if it's just O(log log n) without "amortized".