C. Maximum Median

time limit per test

2 seconds

memory limit per test

256 megabytes

You are given an array a of n integers, where n is odd. You can make the following operation with it:

  • Choose one of the elements of the array (for example ai) and increase it by 1 (that is, replace it with ai+1).

You want to make the median of the array the largest possible using at most k operations.

The median of the odd-sized array is the middle element after the array is sorted in non-decreasing order. For example, the median of the array 1,5,2,3,5 is 3.

Input

The first line contains two integers n and k (1≤n≤2⋅105, n is odd, 1≤k≤109) --- the number of elements in the array and the largest number of operations you can make.

The second line contains n integers a1,a2,...,an (1≤ai≤109).

Output

Print a single integer --- the maximum possible median after the operations.

Examples

Input

Copy

复制代码
3 2
1 3 5

Output

Copy

复制代码
5

Input

Copy

复制代码
5 5
1 2 1 1 1

Output

Copy

复制代码
3

Input

Copy

复制代码
7 7
4 1 2 4 3 4 4

Output

Copy

复制代码
5

Note

In the first example, you can increase the second element twice. Than array will be 1,5,5 and it's median is 5.

In the second example, it is optimal to increase the second number and than increase third and fifth. This way the answer is 3.

In the third example, you can make four operations: increase first, fourth, sixth, seventh element. This way the array will be 5,1,2,5,3,5,5 and the median will be 5.

解题说明:此题是一道数学题,首先对数列进行从小到大排序,为了让中位数变大,让中位数变成和后面的数一样大,于是让该中位数在加完k后和后面的X个数字相同即可。

cpp 复制代码
#include<iostream>
#include<algorithm>
using namespace std;
int n, k, m, i;
int main()
{
	cin >> n >> k;
	int a[200004];
	m = n / 2;
	for (i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	sort(a, a + n);
	for (i = a[m]; k > 0; i++) 
	{
		while (i == a[m + 1])
		{
			m++;
		}
		k = k - (m - n / 2 + 1);
	}
	if (k == 0)
	{
		cout << i<<endl;
	}
	else
	{
		cout << i - 1<<endl;
	}
	return 0;
}
相关推荐
不知名的老吴2 分钟前
线程的生命周期之线程同步
java·开发语言·jvm
努力努力再努力wz36 分钟前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表
J2虾虾42 分钟前
C 语言 void 完全用法
c语言·开发语言
八解毒剂1 小时前
数据结构-平衡二叉树——对二叉搜索树的优化
数据结构·c++·算法
会Tk矩阵群控的小木1 小时前
基于Python的iMessage短信群发与社媒多账号统一管理系统实现
开发语言·windows·python·新媒体运营·开源软件·个人开发
我是一颗柠檬1 小时前
【Java项目技术亮点】分库分表+数据路由策略:单表5000万后的架构升级方案
java·开发语言·分布式·架构
wu_ye_m1 小时前
学习c语言第35天 函数声明和定义
c语言·开发语言·学习
njsgcs1 小时前
c# solidworks 创建装配体工程图+bom
开发语言·c#·solidworks
运行时记录1 小时前
别再手动写提示词了 — SkillOpt 让技能文档自己进化
算法
啦啦啦啦啦zzzz2 小时前
算法总结(二分查找、双指针)
c++·算法