围栏高度


【问题描述】
奶牛们对围栏的高度非常敏感。奶牛希望围栏高度既不太矮以至于他们没有安全感,也不太高以至于她们看不见围栏外的天地。所以每头奶牛都有自己喜欢的高度。奶牛有N头,每个奶牛有一个自己喜欢的高度在[1..10,000]范围里。 这对John来说是一个头疼的问题。作为一个美学观点强烈的人,他希望围栏的高度基本相同,但作为一个有同情心的人,他希望能尽可能的满足奶牛们的需求。(或许他只是一个自私的人,希望奶牛能给他多产点奶)

作为妥协,他决定将围栏的柱子做成不同的高度以满足大多数奶牛的需求(必须严格超过半数)。一个满意的条件是在所有的柱子中有它喜欢的那个高度。但同时John希望最高的柱子和最矮的柱子之间的高度差最小。请你帮他解决这个问题。

围栏的高度仅仅由柱子的高度决定。

【输入】
第1行:一个整数N。(1<=n<=10000)

第2..N+1:一个整数ai表示这头牛喜欢的高度。

【输出】
仅一行即最高的柱子和最矮的柱子之间的高度差。

【样例输入】
3
1
10
3
【样例输出】
2
【样例说明】
John使用高度为1,3的柱子建围栏,使三头牛中的两头满意,而3-1=2,所以输出2。
时间限制 : 1s

空间限制 : 256M

把所有奶牛的要求排序之后,按照贪心,我们肯定选取一段连续的奶牛的要求,所以在这一段中最左边的和最右边的差就是这一段的最大高度差。全部找出来求个最小值即可。

#include
#include 
using namespace std;
const int N=10005;
int n,ans=2147483647,m;
int a[N];
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	m=n/2+1;
	sort(a+1,a+n+1);
	for(int i=1;i+m-1<=n;i++)
		ans=min(ans,a[i+m-1]-a[i]);
	cout<