种类数
题号:NC295405
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}给定一个长度为 n 的数组 a_1,a_2,\dots,a_n,定义一轮操作如下:
\hspace{15pt}\bullet\,x 为当前数组中所有数的种类数(即不同数的数量),随后对数组中的每一个元素都进行一次修改——对于每个索引 i \left ( 1\leqq i\leqq n \right ),使得 a_i 变为 \max\{0, a_i-x\}
\hspace{15pt}我们想知道,至少需要多少轮操作(可以为零轮),才能使得数组 a 中所有数变得相同。我们可以证明,有限次操作内一定可以达成目标。

输入描述:

\hspace{15pt}第一行输入一个整数 n \left ( 1\leqq n\leqq 10^5 \right ),表示数组的长度。 
\hspace{15pt}第二行输入 n 个整数 a_1,a_2,\dots,a_n \left ( 0\leqq a_i\leqq 10^{18} \right ),表示数组的元素。

输出描述:

\hspace{15pt}输出一个整数,代表要使得数组 a 中所有数变得相同的最少操作轮数。
示例1

输入

复制
5
10 0 9 1 10

输出

复制
3

说明

\hspace{15pt}在这个样例中,最优操作过程如下:
\hspace{23pt}\bullet\,第一轮,种类数 x=4,数组变为 \{6,0,5,0,6\}
\hspace{23pt}\bullet\,第二轮,种类数 x=3,数组变为 \{3,0,2,0,3\}
\hspace{23pt}\bullet\,第三轮,种类数 x=3,数组变为 \{0,0,0,0,0\}
示例2

输入

复制
5
1 3 6 10 16

输出

复制
5