#include <iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 2e5+10;
typedef long long ll;
ll arr[N];
ll n, x;
//重写二分判断函数
bool check(ll h) {
//计算以这个高度下,水槽最多能装多少水
ll sum = 0;
for (int i = 1; i <= n; i++) {
if (arr[i] < h) sum += h - arr[i];
}
if (sum <= x) return true;
return false;
}
void sovle() {
cin >> n >> x;
for (int i = 1; i <= n; i++)cin >> arr[i];
//二分水槽高度,最高也就2e9,时间复杂度log2e9约等于30.
ll l = 1, r = 2e9;
while (l < r) {
ll mid = l + r + 1>> 1;
if (check(mid)) l = mid;
else r = mid - 1;
}
cout << l << endl;
//总时间复杂度:30*n
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
while (t--) {
sovle();
}
return 0;
}
Codeforces Round 898 (Div. 4)---->E. Building an Aquarium
最新推荐文章于 2024-07-12 18:56:03 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)