F. 数组缩减
时间限制: 每测试 3 秒
内存限制: 每测试 256 兆字节
给你一个包含 n 个整数的数组 a。
在一次操作中,你可以从数组中选择一些元素并将其移除。但是,你选择的元素必须满足以下条件之一:
- 要么所有被选中的元素都相等;
- 要么被选中的元素中没有两个相等的。
注意,如果你只选择 1 个元素进行移除,它自动满足这些条件。
例如,若 a={1,2,1,1,3},在一次操作中可能移除的一些元素选择有:
- 第 1 个元素;
- 第 1 个和第 3 个元素;
- 第 1 个、第 3 个和第 4 个元素;
- 第 3 个和第 4 个元素;
- 第 2 个、第 4 个和第 5 个元素;
- 以及许多其他选择。
然而,你不能选择第 2 个、第 3 个和第 4 个元素,因为第 2 个元素不等于第 4 个,但第 3 个元素等于第 4 个。
对于每个 x(从 0 到 n−1),你需要计算将数组大小恰好缩减到 x 所需的最少操作次数。
输入格式
第一行包含一个整数 t (1≤t≤104) — 测试用例的数量。
每个测试用例由两行组成:
- 第一行包含一个整数 n (1≤n≤3⋅105) — 数组的大小;
- 第二行包含 n 个整数 a1,a2,…,an (1≤ai≤n) — 数组本身。
输入的额外约束:所有测试用例的 n 之和不超过 3⋅105。
输出格式
对于每个测试用例,输出 n 个整数 c0,c1,…,cn−1,其中 ci 是将数组大小缩减到恰好 i 所需的最少操作次数。
样例
输入
5
11
5 5 5 5 2 2 2 8 6 1 7
6
3 3 3 3 3 3
5
2 1 3 5 4
8
1 1 1 2 3 4 5 6
1
1
输出
3 3 2 2 2 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1
2 2 1 1 1 1 1 1
1
样例解释
在第一个示例中,答案的获取方式如下:
- c0=3:移除 a8,a9,a10,a11;然后移除 a1,a2,a3,a4;然后移除 a5,a6,a7;
- c1=3:移除 a8,a9,a10,a11;然后移除 a1,a2,a3,a4;然后移除 a5,a6;
- c2=2:移除 a7,a8,a9,a10,a11;然后移除 a1,a2,a3,a4;
- c3=2:移除 a7,a8,a9,a10,a11;然后移除 a1,a2,a3;
- c4=2:移除 a7,a8,a9,a10,a11;然后移除 a1,a2;
- c5=1:移除 a1,a7,a8,a9,a10,a11;
- c6=1:移除 a7,a8,a9,a10,a11;
- c7=1:移除 a1,a2,a3,a4;
- c8=1:移除 a1,a2,a3;
- c9=1:移除 a1,a2;
- c10=1:移除 a7。