AcWing 3578. 最大中位数
原题链接
中等
#include<bits/stdc++.h>
using namespace std;
long long a[200010];
long long sum[200010];
int main() {
int n;
long long k;
cin>>n>>k;
for(int i = 1;i <= n;i ++ ) {
cin>>a[i];
}
sort(a + 1,a + 1 + n);
int pos = n / 2 + 1;//中位数所在位置
for(int i = 1;i <= n;i ++ ) {
sum[i] = sum[i - 1] + a[i];
}
long long res = a[pos];
for(int i = pos;i <= n;i ++ ) {
long long more = k + (sum[i] - sum[pos - 1]);
long long num = more / (i - pos + 1);
if(num < a[i]) break;
if(i < n) {
num = min(num,a[i + 1]);
}
res = max(res,num);
}
cout<<res;
}