思路:二分 ;

因为是要增大中位数,所以,我们发现,想要让中位数变大,就只能让中位数变成和后面的数一样大,而且想让它最大,于是就想到让该中位数在加完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 ; }