AcWing 3578. 最大中位数(模拟)
原题链接
中等
作者:
Godnat
,
2021-05-29 20:37:30
,
所有人可见
,
阅读 897
#include<iostream>
#include<algorithm>
using namespace std ;
const int N = 2e5 + 5 ;
int a[N] ;
int main(){
int n, k ;
cin >> n >> k ;
for(int i = 0; i < n; i++){
cin >> a[i] ;
}
sort(a, a + n) ;
int m = n >> 1, s = 0 ;
// 每次循环尽可能将[m, i)区间的数填至不超过a[i]值的最大值
for(int i = m + 1; i < n; i++){
int j = i - m ;
int c = min(a[i] - a[i - 1], k / j) ;
s += c ;
k -= c * j ;
}
// 将剩下的数填完
s += k / (n - m) ;
cout << a[m] + s << endl;
return 0 ;
}