给一个序列 a1,a2,…,an�1,�2,…,��。
你可以对这个序列进行操作,每次操作可以选择一个元素,把它加 11,经过不超过 k� 次操作之后,希望序列里面的最小值最大。问这个值是多少。
输入格式
第一行两个整数 n,k�,�。接下来一行 n� 个整数,表示 a1,a2,…,an�1,�2,…,��。
输出格式
输出一行,一个整数,表示答案。
样例输入1
5 10
1 4 2 6 8
样例输出1
5
样例输入2
1 10000000000000
100000000
样例输出2
10000100000000
数据规模
对于 100%100% 的数据,满足 1≤n≤105,1≤ai≤108,0≤k≤10131≤�≤105,1≤��≤108,0≤�≤1013。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n;
long long k;
long long a[N];
bool check(long long x)
{
long long cnt = 0;
for (int i = 0; i < n; i ++ )
{
if (a[i] < x)
cnt += x - a[i];
if (cnt > k)
return false;
}
return true;
}
int main()
{
cin >> n >> k;
for (int i = 0; i < n; i ++ ) cin >> a[i];
long long l = 1, r = 1e14;
while (l < r)
{
long long mid = (l + r + 1) >> 1;
if (check(mid)) l = mid;
else r = mid - 1;
}
cout << l << endl;
return 0;
}