神奇编码
题号:NC257499
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

“你为什么不问问神奇海螺呢?”

小沙有一个字符集,以及该字符集每个字符出现的频率表,现在想要构建一颗哈夫曼树,由于小沙喜欢短小的树,所以他希望这颗哈夫曼树的树高尽可能的小。

对于小沙需要构建的这颗哈夫曼树一共有 m 个节点,小沙发现虽然这个 m 很大,但每个字符出现的出现的频率都比较接近,甚至有许多都是重复的。

小沙将其整理了一下,发现字符的出现频率都在 1~n 之间, 所以小沙将其整理完后的数组 b 交给你,想要请你设计一个解决方案,要求保证编码树是一颗哈夫曼树的情况下,哈夫曼树树高最小。

其中 b_i 的值代表出现频率为 i 的字符有多少个。

请你告诉小沙这个最小值为多少。

注:根节点高度从0开始。

输入描述:

第一行输入一个正整数 n

第二行输入 n 个正整数 b_i

保证有 1 \le n \le 10^50 \le b_i \le 10^{12}

保证数据不全为0。

输出描述:

第一行输出一个整数代表答案。
示例1

输入

复制
3
1 2 3

输出

复制
3

说明

生成的哈夫曼树可以是下图所示,其树的高度为3。