折半丢弃
题号:NC275889
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\,\,\,\,\,\,\,\,\,\,已知长度为 n 的序列 a_1,a_2,\dots,a_n ,定义一次操作的过程为:选择任意一个元素,随后,将 \left \lfloor \dfrac{a_i}{2} \right \rfloor(向下取整)添加到原序列的结尾,并将 a_i 从原序列中删除。
\,\,\,\,\,\,\,\,\,\,你可以进行任意多次操作(也可以一次操作都不做),要求使得序列的 \rm MEX 最大。
\,\,\,\,\,\,\,\,\,\,数组的 \rm MEX 定义为:没有出现在数组中的最小非负整数,例如,数组 \{3,1,2\}\rm MEX0

输入描述:

\,\,\,\,\,\,\,\,\,\,每个测试文件均包含多个测试点。第一行输入一个整数 T\ (1\le T\le 10^4) 代表测试数据组数,每组测试数据描述如下:
\,\,\,\,\,\,\,\,\,\,第一行输入一个整数 n\ (1\le n\le 10^5) ,代表序列的长度。
\,\,\,\,\,\,\,\,\,\,第二行输入 n 个整数 a_1,a_2,\dots,a_n\ (0\le a_i \le 10^6) 。数字彼此间通过空格间隔。
\,\,\,\,\,\,\,\,\,\,除此之外,保证所有的 n 之和不超过 10^5

输出描述:

\,\,\,\,\,\,\,\,\,\,对于每一个测试点,在一行上输出一个整数,代表当前序列的最大 \rm MEX
示例1

输入

复制
4
6
0 1 2 4 8 12
5
1 2 4 8 12
4
0 1 3 4
10
1 1 1 2 1 3 2 2 1 1

输出

复制
5
5
4
4

说明

\,\,\,\,\,\,\,\,\,\,对于第一个测试点:
\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,● 操作第 6 个元素 12 ,随后将 \left \lfloor \dfrac{12}{2} \right \rfloor=6 加入到序列结尾,新的序列为 \{0,1,2,4,8,6\}
\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,● 继续操作刚刚新加入的元素 6 ,随后将 \left \lfloor \dfrac{6}{2} \right \rfloor=3 加入到序列结尾,新的序列为 \{0,1,2,4,8,3\}
\,\,\,\,\,\,\,\,\,\,此时,得到原序列的最大 \rm {MEX}5 。可以穷举证明此时没有比 5 更大的答案。
\,\,\,\,\,\,\,\,\,\,对于第二个测试点:
\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,● 操作第 5 个元素,新的序列为 \{1,2,4,8,6\}
\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,● 继续操作第 5 个元素,新的序列为 \{1,2,4,8,3\}
\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,● 选择第 4 个元素操作,新的序列为 \{1,2,4,3,4\}
\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,● 选择第 3 个元素操作,新的序列为 \{1,2,3,4,2\}
\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,● 选择第 2 个元素操作,新的序列为 \{1,3,4,2,1\}
\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,● 最后选择第 1 个元素,新的序列为 \{3,4,2,1,0\}
\,\,\,\,\,\,\,\,\,\,此时,得到答案 \rm MEX5