Это может быть решено в O (n ^ 2) с помощью динамического программирования. Код Python для того же будет выглядеть так: -
def LIS(numlist):
LS = [1]
for i in range(1, len(numlist)):
LS.append(1)
for j in range(0, i):
if numlist[i] > numlist[j] and LS[i]<=LS[j]:
LS[i] = 1 + LS[j]
print LS
return max(LS)
numlist = map(int, raw_input().split(' '))
print LIS(numlist)
Для ввода: 5 19 5 81 50 28 29 1 83 23
вывод будет: [1, 2, 1, 3, 3, 3, 4, 1, 5, 3]
5
list_index списка вывода является list_index списка ввода. Значение данного list_index в выходном списке обозначает самую длинную увеличивающуюся длину подпоследовательности для этого list_index.