Можно что-то типа такого:
Мы будем считать включая пустую строку в результат. Потом надо будет вычесть 1.
Для пустой строки результат 1.
Добавим символ
1. он новый -> результат удвоим
2. он уже был -> удвоим результат и вычтем из того что получилось результат перед предыдущим(последним из них ) таким же числом.
Можно хранить массив результатов для каждого числа(и 0 для тех чисел которых небыло). Пусть возможных значений элементов
. Есть 2 варианта:
1.Храним массив длинны
. Сложность
-считать придется в длинной арифметике.
2.Считываем возможное множество значений и сортируем его. Заводим 2рой массив для соответствующих результатов. Используем его для хранения данных.Сложность
-считать придется в длинной арифметике.
Например:
1,2,1,1,2
k=0
Результат: 1, Результат перед 1: 0,Результат перед 2: 0
k=1
Результат: 2, Результат перед 1: 1,Результат перед 2: 0
k=2
Результат: 4, Результат перед 1: 1,Результат перед 2: 2
k=3
Результат: 7=8-1, Результат перед 1: 4,Результат перед 2: 2
k=4
Результат: 10=14-4, Результат перед 1: 7,Результат перед 2: 2
k=5
Результат: 18=20-2, Результат перед 1: 7,Результат перед 2: 10
Ответ 17=18-1.