题目描述
我们定义一个由 m 个非负整数组成的数组 b 的“权值”为满足 bi>mex(b) 的下标 i 的个数,这里 1≤i≤m。其中,mex(b) 表示集合 b 的“最小未出现非负整数(MEX)∗”。
现在,给定一个由 n 个非负整数组成的数组 a。对于其子数组† [al,al+1,…,ar],我们记这个子数组的权值为 w(l,r)。
对于每个 1≤i≤n,你需要找出所有以第 i 个元素结尾的子数组中最大的权值。即,要求对于每个 1≤i≤n,计算 1≤l≤imaxw(l,i)。
∗ 集合 b=b1,b2,…,bm 的最小未出现非负整数(MEX)定义为最小的在 b 中没有出现的非负整数 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 个元素结尾的 a 的子数组中的最大权值,即 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
解释 #1
在第一个测试用例中,有 w(1,1)=0,因为 mex([a1])=1,没有下标满足 ai>1。
在第二个测试用例中,可以根据定义依次计算每个子数组 [l,r] 的权值:
- 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)=w(3,3)=1。因此,1≤l≤3maxw(l,3)=2;
- w(1,4)=2,w(2,4)=w(3,4)=1,w(4,4)=0。因此,1≤l≤4maxw(l,4)=2;
- w(1,5)=0,w(2,5)=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,分别是 1 和 3。