题意:就是给一n(奇数)个元素数组,可以对它的元素执行k次+1操作,递增排序,求中位数最大是多少。
那我们在排完序之后,中位数前的元素可以不管它,只要对中位数后的操作就行,我们要判断和中位数相等的元素有几个,再用k减去它,循环一下,当k小于0时没的减了,也就是数组元素不能再加了时跳出来。
附ac代码:
1 #include
2 #include
3 #include
4 #include
5 #include
6 #define ma (int)2e5+1
7 using namespace std;
8 int main(){
9 int n,k,a[ma];
10 cin>>n>>k;
11 for(int i=1;i<=n;i++){
12 cin>>a[i];
13 }
14 if(n==1){
15 cout<=0;i++){
21 while(i==a[q+1])q++;
22 k-=q-(1+n)/2+1;
23 }
24 cout<<i-1;
25 return 0;
26 }
因为我这k=0时还会操作,但是其实不能操作了,所以i++后我输出又要减回去;如果循环内操作完k<0,那说明之前执行i++的操作无效,所以也是i减回去,最后都输出i-1.
手机扫一扫
移动阅读更方便
你可能感兴趣的文章