string.split (разделитель, предел) - это метод, который вы хотите
"someone@example.com".split("@")[0]
В heapify () вы используете
swap(smallest,arr[i]);
, который обменивает значения в наименьшее и arr [i]. Но arr [l (i)] или arr [r (i)] не изменяется. На самом деле это копирует меньшее значение arr [l (i)] и arr [r (i)] в arr [i].
Также в основном вы делаете
for (int i = 0; i < k - 1; i--) {
, который отсчитывает i до достижения INT_MIN вместо того, чтобы считать до k. Это быстро приводит к тому, что куча становится пустой, а код перестаёт работать.
PS: почему бы не использовать std :: make_heap и friends?