Оптимизация решения задачи python
Решил задачу, но необходимо немного оптимизировать время работы. Подскажите, как это возможно сделать?
Условие задачи:
В строю отважной армии Сарумана друг за другом стоят n n орков, рост i i-го из них равен a i a i условных единиц. Новобранец-орк Гримморхус тоже собирается встать в этот строй, причём Саруману хочется поставить Гримморхуса на такую позицию p p, чтобы f ( p ) f(p) = [количество орков левее Гримморхуса того же роста, что и Гримморхус] умножить на [количество орков правее Гримморхуса с ростом, не равным росту Гримморхуса] было максимально. Для этого Гримморхус может встать в начало строя, в её конец, или между любыми двумя соседними орками. К сожалению ни Гримморхус, ни Саруман не могут точно вспомнить рост Гримморхуса, у них есть только m m предположений о том, каким он может быть, и для каждого из них они хотели бы знать оптимальную позицию, на которую Гримморхусу стоило бы встать.
Описание входных данных
В первой строке даны n n целых чисел a i a i
- рост орков, стоящих в строю (1 ⩽ ⩽ n , a i n,a i ⩽ ⩽ 1 0 5 10 5 ). Во второй строке даны m m целых чисел x i x i
- предполагаемый рост Гримморхуса (1 ⩽ ⩽ m , x i m,x i ⩽ ⩽ 1 0 5 10 5 ).
Описание выходных данных
В единственной строке выведите выведите m целых чисел - значение f ( p ) f(p) в оптимальной для данного роста позиции.
Формат ввода
1 1 2 2 2 2 1 1 1 1 2 1
1 2 1
Формат вывода
8 12 8
Моё решение:
row = input().split(' ')
heights = input().split(' ')
result = []
def right_sum(array, index, height):
rsum = 0
for i in range(index, len(array)):
if array[i] != height:
rsum += 1
return rsum
def left_sum(array, index, height):
lsum = 0
for i in range(0, index):
if array[i] == height:
lsum += 1
return lsum
for height in heights:
maxCount = 0
for i in range(0, len(row)):
current = left_sum(row, i, height) * right_sum(row, i, height)
if current > maxCount:
maxCount = current
result.append(str(maxCount))
print(' '.join(result))