class FenwickTree:
def __init__(self, size):
self.n = size + 2 # Accommodate 1-based indexing
self.tree = [0] * self.n
def update(self, idx, value):
idx += 1 # Convert to 1-based indexing
while idx < self.n:
self.tree[idx] += value
idx += idx & -idx
def query(self, idx):
idx += 1 # Convert to 1-based indexing
result = 0
while idx > 0:
result += self.tree[idx]
idx -= idx & -idx
return result
def main():
import sys
n = int(sys.stdin.readline())
ai_list = list(map(int, sys.stdin.readline().split()))
max_ai = max(ai_list) + 2 # Ensure the tree is large enough
total_cost = 0
total_sum = 0
sums_BIT = FenwickTree(max_ai)
for ai in ai_list:
ai_idx = ai # Since ai ranges from 1 to n
# Sum of elements less than ai
sum_less = sums_BIT.query(ai_idx - 1)
# Sum of elements greater than ai
sum_greater = total_sum - sums_BIT.query(ai_idx)
cost_right = sum_less # Cost when inserting from the right
cost_left = sum_greater # Cost when inserting from the left
total_cost += min(cost_left, cost_right)
sums_BIT.update(ai_idx, ai)
total_sum += ai
print(total_cost)
if __name__ == "__main__":
main()
Перестановка считается отсортированной, если в ней все числа расположены по возрастанию, то есть она имеет вид 1, …, n.
Иннокентий начинает рабочий день с пустой последовательности чисел. За день он сортирует вставками перестановку длины n. В начале каждой операции вставки он получает очередное число ai из перестановки заказчика, после чего обрабатывает его, вставляя в отсортированную последовательность из ранее полученных чисел. После каждого такого добавления, последовательность уже обработанных чисел должна быть отсортирована по возрастанию.
Перед тем как вставить число ai в последовательность, он может выбрать с какого края последовательности начать вставку. Далее он устанавливает число ai с этого края и последовательно меняет вставляемое число с рядом стоящим числом bj до тех пор, пока число ai не встанет на свое место. На каждую перестановку вставляемого числа ai с числом bj Иннокентий тратит bj единиц энергии.
Вам дана перестановка длины n из чисел ai в том порядке, в котором Иннокентий их будет обрабатывать. Подскажите ему, какое минимальное количество энергии ему потребуется потратить, чтобы отсортировать всю перестановку.
Формат ввода
В первой строке находится одно целое число n — длина перестановки. 1 ≤ n ≤ 2 * 105.
Во второй строке содержится n целых чисел ai через пробел в том порядке, в котором они поступают на обработку Иннокентию. Гарантируется, что эти числа образуют перестановку длины n, то есть каждое число от 1 до n содержится в заданном наборе ровно один раз.
Формат вывода
Вывести одно число — минимальные суммарные энергозатраты Иннокентия для сортировки вставками заданной на входе перестановки.
Пример
Ввод
9
2 9 1 5 6 4 3 8 7
Вывод
43
Гптэшка фигово решает данную задачу помогите сам не могу уже