← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var t int
	if _, err := fmt.Fscan(reader, &t); err != nil {
		return
	}

	for tc := 0; tc < t; tc++ {
		var n int
		fmt.Fscan(reader, &n)

		c := make([]int, n+1)
		for i := 1; i <= n; i++ {
			fmt.Fscan(reader, &c[i])
		}

		dp := make([][]int, n+1)
		for i := 0; i <= n; i++ {
			dp[i] = make([]int, n+1)
			for j := 0; j <= n; j++ {
				dp[i][j] = -1
			}
		}

		for i := 1; i <= n; i++ {
			if i == 1 {
				dp[i][0] = 1
			} else {
				dp[i][1] = 1
			}

			for p := 1; p < i; p++ {
				if c[p] < c[i] {
					cost := 1
					if p == i-1 {
						cost = 0
					}
					for j := cost; j <= p; j++ {
						if dp[p][j-cost] != -1 {
							val := dp[p][j-cost] + 1
							if val > dp[i][j] {
								dp[i][j] = val
							}
						}
					}
				}
			}
		}

		ans := make([]int, n+1)
		for k := 0; k <= n; k++ {
			ans[k] = n
		}

		for i := 1; i <= n; i++ {
			for j := 0; j <= i; j++ {
				if dp[i][j] != -1 {
					g := j
					if i < n {
						g++
					}
					if g <= n {
						cost := n - dp[i][j]
						if cost < ans[g] {
							ans[g] = cost
						}
					}
				}
			}
		}

		for k := 1; k <= n; k++ {
			if ans[k-1] < ans[k] {
				ans[k] = ans[k-1]
			}
		}

		for k := 1; k <= n; k++ {
			if k > 1 {
				fmt.Fprint(writer, " ")
			}
			fmt.Fprint(writer, ans[k])
		}
		fmt.Fprintln(writer)
	}
}
```