Как я могу ускорить выполнение кода?
У меня есть код, который решает некую задачу, аля бинарный поиск, как я могу сделать сложность n+m или n*m? Код:
n = list(map(int, input().split()))
m = list(map(int, input().split()))
def f(a, p):
left = 0
right = 0
for i in range(p):
if a[i] == a[p]:
left += 1
for i in range(p+1, len(a)):
if a[i] != a[p]:
right += 1
return left * right
for x in m:
max_val = -1
max_pos = -1
for i in range(len(n)+1):
val = f(n[:i] + [x] + n[i:], i)
if val > max_val:
max_val = val
max_pos = i
print(max_val, end=' ')
Код все тесты проходит, но по времени нет, как можно ускорить данный код на пару секунд по выполнению?
Входные данные:
1 1 2 2 2 2 1 1 1
1 2 1
Выходные:
8 12 8
Задача: В шеренгу друг за другом стоят n человек, рост i-го из них равен ai условных единиц. Вы тоже собираетесь встать в эту шеренгу, при чем вам хочется встать на такую позицию p, чтобы f(p) = [количество людей левее вас того же роста, что и вы] умножить на [количество людей правее вас ростом, не равным росту вас] было максимально. Для этого вы можете встать в начало шеренги, в её конец, или между любыми 2мя соседними людьми. К сожалению вы не можете точно вспомнить ваш рост, у вас есть только m предположений о том, каким он может быть, и для каждого из них вы хотели бы знать оптимальную позицию, на которую вам стоило бы встать.