E. 又一个墨西哥问题
每次测试时间限制:2 秒
每次测试内存限制:512 兆字节
我们定义数组 b 的权重为满足 bi>MEX(b) 的下标 i(1≤i≤m)的个数。
这里 MEX(b) 表示整数数组 b 的最小排除值(MEX)∗。
你被赋予一个数组 a,包含 n 个非负整数。对于它的子数组 [al,al+1,…,ar],记该子数组的权重为 w(l,r)。
对于每个 1≤i≤n,你必须找到所有以 i 结尾的子数组的最大权重。
换句话说,对于每个 1≤i≤n,求出:
1≤l≤imaxw(l,i)
∗ 定义:
一个整数集合 {b1,b2,…,bm} 的 MEX 是最小的非负整数 x,使得 x 不在该集合中出现。
† 定义:
数组 c 是数组 a 的子数组,如果 c 可以通过从 a 的开头删除若干(可能为零或全部)元素,以及从结尾删除若干(可能为零或全部)元素得到。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 t(1≤t≤104)。
接下来是每个测试用例的描述。
每个测试用例的第一行包含一个整数 n(1≤n≤3×105)—— 数组 a 的长度。
第二行包含 n 个整数 a1,a2,…,an(0≤ai≤n)—— 数组 a 的元素。
保证所有测试用例的 n 之和不超过 3×105。
输出
对于每个测试用例,输出 n 个整数,其中第 i 个整数表示所有以 i 结尾的子数组的最大权重,即:
1≤l≤imaxw(l,i)
示例
输入
6
1
0
5
2 0 3 0 1
6
0 1 2 3 5 4
7
0 2 2 0 4 1 3
8
2 1 0 3 0 2 1 3
15
0 1 9 1 0 2 5 3 7 0 4 15 2 0 1
输出
0
1 1 2 2 1
0 1 2 3 4 5
0 1 2 2 3 2 3
1 2 0 1 1 2 2 3
0 1 2 3 1 1 2 3 4 4 5 6 7 7 3
注释
第一个测试用例:
w(1,1)=0,因为 MEX([a1])=1,且没有满足 ai>1 的下标。
第二个测试用例(a=[2,0,3,0,1]):
- w(1,1)=1,因此 1≤l≤1maxw(l,1)=1;
- w(1,2)=1,w(2,2)=0,因此 1≤l≤2maxw(l,2)=1;
- w(1,3)=2,w(2,3)=1,w(3,3)=1,因此 1≤l≤3maxw(l,3)=2;
- w(1,4)=2,w(2,4)=1,w(3,4)=1,w(4,4)=0,因此 1≤l≤4maxw(l,4)=2;
- w(1,5)=0,w(2,5)=1,w(3,5)=1,w(4,5)=0,w(5,5)=1,因此 1≤l≤5maxw(l,5)=1。
例如,w(1,4)=2,因为 MEX([a1,a2,a3,a4])=1,并且子数组中有两个下标满足 ai>1:i=1 和 i=3。