Добрый день.
Хочется найти быстрое решение задачи: дан массив

длины

символов, требуется построить массив чисел

, такой что на

-ой позиции массива

стоит число

тогда и только тогда, когда
![$A[x] = A[i]$ $A[x] = A[i]$](https://dxdy-01.korotkov.co.uk/f/c/c/a/cca6b570074a49de70f665bfa8a2d25182.png)
или

и число x максимальное с таким свойством из тех, что

, притом для одинаковых символов из массива A должна быть ровно одна позиция

, где стоит единица (т.е. при первом появлении символа в массиве A). Пример: массив

; массив

.
Решение есть и даже за

, но хочется попроще.
Составить хэш таблицу

символов, изначально в каждой ячейке которой поместить

. После поочерёдно пробежаться по массиву

и выполнить операцию: на

-ом шаге в
![$B[i]$ $B[i]$](https://dxdy-01.korotkov.co.uk/f/c/e/a/cea5ec6daf8ad684cb027866d7c3674b82.png)
вписать
![$H[A[i]]$ $H[A[i]]$](https://dxdy-04.korotkov.co.uk/f/3/e/b/3eb1860176dcbd55265fe0bfcd0c106b82.png)
и заменить
![$H[A[i]]$ $H[A[i]]$](https://dxdy-04.korotkov.co.uk/f/3/e/b/3eb1860176dcbd55265fe0bfcd0c106b82.png)
на

.
Меня именно не устраивает в этом решении использование хэш функции. Задача очень естесственная и уже несколько раз встречалась на практике. Понятно, за ассимптотикой некуда гнаться, хочется за константой.
Заранее спасибо за Ваши советы.
P.S.: Понятно, что тут можно под каждый символ создать массив, там всего будет 24 ячейки - не велика потеря, но изначально задача стоит так, что и в первом массиве - числа.