小 R 有 n 颗能量水晶,其中第 i(1 \le i \le n)颗的能量值为整数 a_i。
小 R 想用其中若干颗能量水晶合成一颗大水晶,用于合成的水晶必须具有相同的能量值。小 R 希望参与合成的水晶尽可能多。他可以进行至多 m 次操作。每次操作可以任选一颗水晶,将其能量值增加 1;同一颗水晶可以被重复选择。
你需要帮助小 R 求出,进行至多 m 次操作后,他最多能用多少颗能量水晶合成一颗大水晶。
输入的第一行包含一个正整数 n 和一个非负整数 m,分别表示能量水晶的数量和最多可以进行的操作次数。
输入的第二行包含 n 个整数 a_1, a_2, \ldots, a_n,依次表示每颗能量水晶的能量值。
输出一行一个正整数,表示进行至多 m 次操作后,小 R 最多能用多少颗能量水晶合成一颗大水晶。
5 5 1 2 4 8 9
3
5 8 -3 -1 2 2 7
4
样例 1 解释:小 R 有 5 颗能量水晶,能量值分别为 1,2,4,8,9。他可以对能量值为 1 和 2 的水晶分别操作 3 次和 2 次,使原来能量值为 1,2,4 的三颗水晶的能量值都变成 4,共进行 5 次操作。因此小 R 可以用 3 颗能量水晶合成一颗大水晶。
数据范围:对于所有测试数据,均有:
• 1 \le n \le 5 \times 10^5,0 \le m \le 10^{18};
• 对于所有 i(1 \le i \le n),均有 |a_i| \le 10^{12}。
本题共 20 个等分测试点,每点 5 分。
| 测试点编号 | n ≤ | m ≤ | max|a_i| ≤ | 特殊性质 |
|---|---|---|---|---|
| 1, 2 | 5 | 10 | 20 | 无 |
| 3 ~ 5 | 16 | 1000 | 20 | 无 |
| 6, 7 | 5000 | 106 | 100 | 无 |
| 8, 9 | 5000 | 109 | 105 | 无 |
| 10 ~ 12 | 5 × 105 | 108 | 100 | 无 |
| 13 ~ 15 | 5 × 105 | 1018 | 1012 | A |
| 16 ~ 18 | 5 × 105 | 1018 | 1012 | B |
| 19, 20 | 5 × 105 | 1018 | 1012 | 无 |
特殊性质 A:对于所有 i(1 \le i \le n),均有 a_i = i。
特殊性质 B:a_1, a_2, \ldots, a_n 构成等差数列。
附加样例:官方题面另有样例 3、4 两组大样例(分别满足测试点 8,9 与 10~12 的约束),因数据量较大未在此列出。
提示
参与合成的水晶最后都变成了同一个能量值 x,而能量值只能增加,所以它们原来的能量值都不超过 x,花费为 \sum (x - a_i)。把 a 排序之后,一组互不相邻的水晶不会比夹在中间的「更便宜」,因此答案对应排序后的一段连续区间。
于是可以枚举右端点并用双指针维护左端点:窗口 [l, r] 内的花费为 a_r \times (r - l + 1) - \sum_{i=l}^{r} a_i,一旦超过 m 就右移 l。也可以用「答案有单调性」的方式二分长度。
a_i 可以为负,m \le 10^{18},n \le 5 \times 10^5,窗口花费最坏可达 10^{18} \times 10^{12} 量级,中间量务必用 64 位甚至 \texttt{\_\_int128} 保存。