Некоторые подробности об использовании дерева:
Вы должны иметь возможность использовать красное черное дерево (или другой тип алгоритма сортировки на основе дерева), используя узлы, которые содержат как значение, так и счетчик: возможно, кортеж(n, count).
Когда вы вставляете новое значение, вы либо создаете новый узел, либо увеличиваете счетчик узла добавляемым значением (если узел с этим значением уже существует).Если вы просто увеличите счетчик, вам потребуется O (logH), где H - высота дерева (чтобы найти узел), если вам нужно его создать, потребуется также O (logH), чтобы создать и расположить узел (константы больше, но они все равно O (logH).
Это гарантирует, что дерево будет иметь не более O (logn) значений (поскольку у вас есть log n различных значений). Это означает, что вставкапримет O (loglogn), и у вас есть n вставок, поэтому O (nloglogn).