Bom eu pensei um pouco diferente, eu usaria um radix sort modificado. Funcionaria da seguinte maneira:
-> primeiro admite que tem um contador em cada "cesta", ele conta quantos elementos a "cesta" possui;
-> na hora de recolher as "cestas" só recolhe as que possuem n/3 dos elementos ou mais;
Acho que assim daria certo, pelo menos não vi um caso que falhasse, porém se fosse na prova eu acrescentaria mais uma verificação só pra ter certeza que tá tudo beleza, ela seria assim:
-> Quando for recolher os elementos das "cestas" na última iteração( bit = k) vai contando e só adiciona caso ele apareça realmente >= n/3;
Creio que essa verificação seja o suficiente, já que nessa altura do campeonato os elementos iguais estão agrupados em uma mesma "cesta" todos juntos.
Ficou clara a ideia? alguém vê algum problema na solução?