交换两个 pb_ds 里的平衡树的引用的时间复杂度是 O(∣a∣+∣b∣)O(|a|+|b|)O(∣a∣+∣b∣) 的!这点和 map 不一样,它那是 O(1)O(1)O(1) 的。所以如果你写了这种代码:
map
void Join(Tree &a, Tree &b) { if (b.size() > a.size()) swap(a, b); each (x, b) a.insert(x); b.clear(); }
那么它的时间复杂度是 O(n2)O(n^2)O(n2) 的!