Maximum Median
题意:有k次机会将某个数加1,问用完k次机会后,最大的中位数是多少。
先找到未使用机会的中位数,只考虑中位数及其以后的数。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int Max=2e5+10;
long long a[Max];
int main()
{
long long m;
long long k;
while(~scanf("%lld%lld",&m,&k))
{
if(m==1)
{
long long ans;
scanf("%lld",&ans);
printf("%lld\n",ans+k);
continue;
}
for(int i=0; i<m; i++)
scanf("%lld",&a[i]);
sort(a,a+m);
long long mid=m/2;
long long num=1,mark=mid;
for(int i=mid+1; i<m; i++)
{
long long cha=a[i]-a[i-1];
if(k>=cha*num)
{
k-=cha*num;
num++;
mark=i;
}
else break;
}
//printf("%d\n",num);
printf("%lld\n",a[mark]+k/num);
}
return 0;
}