思路:二分 ;
因为是要增大中位数,所以,我们发现,想要让中位数变大,就只能让中位数变成和后面的数一样大,而且想让它最大,于是就想到让该中位数在加完k后和后面的x个数相同
当然如果可以让中位数和最后一个数相同时最好不过的
代码来了
#include <bits/stdc++.h>
#define maxn 200010
#define int long long
using namespace std ;
int n , m , a[maxn] ;
int check(int mid) {
int cnt = 0 ;
for(int i = n/2+1 ; i <= n ; i ++) {
if(a[i] > mid) return 1 ;
if(mid-a[i] > m-cnt) return 0 ;
cnt += mid - a[i] ;
}
return 1 ;
}
signed main () {
cin >> n >> m ;
for(int i = 1 ; i <= n ; i ++) {
cin >> a[i] ;
}
sort(a+1,a+1+n) ;
int l = 1 , r = 2100000010 ;
while(l < r) {
int mid = (l+r) >> 1 ;
if(check(mid)) {
l = mid + 1 ;
}else {
r = mid ;
}
}
cout << r -1<< endl ;
return 0 ;
}