#include #include using namespace std; const int MAXN = 3000; int N, P[MAXN]; int inv[MAXN][MAXN]; int DP[MAXN][MAXN]; int add(int a, int b) { return a + b; } int zero() { return 0; } using Seg = atcoder::segtree; int main() { cin >> N; for (int i = 0; i < N; ++i) cin >> P[i]; for (int i = 0; i < N; ++i) { Seg seg(N); int ret = 0; for (int j = i; j < N; ++j) { ret += seg.prod(P[j] - 1, N); seg.set(P[j] - 1, 1); inv[i][j] = ret; } } for (int i = 0; i < N; ++i) DP[i][0] = inv[0][i]; for (int i = 0; i < N; ++i) for (int j = i + 1; j < N; ++j) for (int k = 0; k <= i; ++k) DP[j][k + 1] = max(DP[j][k + 1], DP[i][k] + inv[i + 1][j]); for (int i = 0; i < N; ++i) cout << inv[0][N - 1] - DP[N - 1][i] << endl; }