import bisect def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]); idx += 1 P = list(map(int, input[idx:idx+N])) idx += N inv = [[0] * (N + 2) for _ in range(N + 2)] for a in range(1, N + 1): fenwick = [0] * (N + 2) current_inversions = 0 sorted_list = [] for b in range(a, N + 1): val = P[b - 1] cnt = len(sorted_list) - bisect.bisect_right(sorted_list, val) current_inversions += cnt inv[a][b] = current_inversions bisect.insort(sorted_list, val) T = inv[1][N] max_inv = [ [ -1 for _ in range(N+1) ] for __ in range(N+1) ] for i in range(1, N+1): max_inv[1][i] = inv[1][i] for k in range(2, N+1): prev = max_inv[k-1] current = max_inv[k] for i in range(k, N+1): mx = -1 for j in range(k-1, i): temp = prev[j] + inv[j+1][i] if temp > mx: mx = temp current[i] = mx for k in range(1, N+1): if k > N: print(0) else: print(T - max_inv[k][N]) if __name__ == '__main__': main()