一個有 n 個整數的數組 a,n是一個奇數。
每次可以選擇數組裏的一個元素 ai
並把這個元素加上 1。
在至多 k 次操作之後,數組的中位數最大能變成多少。
輸入格式:
多組輸入
第一行兩個整數 n,k(1≤n≤2×10^{5}
,1≤k≤10^{9}
)。
第二行 n 和整數 a1
,a2
,…,an`` 。
輸出格式:
k 次操作後數組的中位數。
輸入樣例:
3 2
1 3 5
輸出樣例:
5
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 2e5 + 10;
const int N = 1e11;
int a[maxn], n, k;
int check(int mid) {
int s = 0;
for (int i =(n+1)/ 2; i < n; i++) {
if (a[i] < mid) {
s += mid - a[i];
if (s > k) return false;
}
}
return true;
}
signed main() {
while (cin >> n >> k) {
for (int i =1; i < n; i++) {
cin >> a[i];
}
sort(a, a + n);
int l = 0, r = N, ans;
while (l <= r) {
int mid = (l + r) / 2;
if (check(mid)) {
ans = mid;
l = mid + 1;
} else r = mid - 1;
}
cout << ans << endl;
}
return 0;
}