説明
牛毎年川で別の岩に1つの岩からのジャンプを含む石蹴りゲームの様々な特別バージョンを、保持します。長いストレート川のこのエキサイティングなアクティビティ、開始時とLの出発点から遠い(1≤L≤10億)岩の終わりです。開始と終了の間に、N(50,000≤0≤N)はロックあり、ロック及び各原点の距離は、ジ(0 <ディ<L)です。
レース中は、牛が出発点からなり、各ステップの最後に到達しようとするだけで、別の岩に1つの岩からジャンプすることができます。もちろん、悪い牛の強さは、自分の目標を達成する方法はありません。
ファーマージョンは毎年彼の牛を誇りに思っているし、ゲームを見ました。しかし、時間をかけて、ゆっくりと前方に岩の間に近接して、他の農家に臆病な牛を見て、彼は非常に疲れを感じました。彼は最短距離最長のジャンプ、そのので、最初からコースの最後には、いくつかの岩を削除することを計画しています。彼はロック番目開始点と終了点のM(0≤M≤N)高々に加えて、除去することができます。
決定されたこれらの岩を削除するには、ジョンを助けてください、できるだけ長い距離が最短のジャンプはいくらですか?
エントリー
最初の行は、隣接する二つの整数の間に単一のスペースで区切られた三つの整数L、N、Mを含有します。
次のN行は、それぞれ各岩の距離の始点を表す整数行。岩プレス、近くの出発点から所定の距離は、二つの岩が同じ位置に表示されていません。
輸出
整数は、最長最短の距離をジャンプします。
サンプル入力
25 5 2
2
11
14
17
21
サンプル出力
4
プロンプト
2つの最短ホップ距離との間に位置する岩2及び14を除去した後(17から21まで又は21から25まで)4です。
制限事項と規則
制限時間:1秒
スペースの制約:128メガバイト
#include <iostreamの> する#include <cstdioを> する#include <cmath> の#include <アルゴリズム> の#include <CStringの> 使用して 名前空間STD。 const int型 MAXN = 50000 + 10 。 INT DIS [MAXN]。 INT メイン() { // freopenは( "stone.in"、 "R"、STDIN)。 // freopenは( "stone.out"、 "W"、STDOUT)。 INTのL、N、M。 CIN >> L >> N >> M。 以下のために(int型 i = 1 ; iが<= N。%のD "、&DIS [I]); int型の L = 1、R = L; ソート(DIS + 1、DIS + N + 1 ); 一方、(L < R) { int型 Iを、ミッド=(L + R + 1)>> 1、POS(0)、温度(0 ); のため(i = 1 ; iが<I ++は= N ) { 場合)L(DIS [I] +中間>を破る; もし(DIS [I] -pos <MID)TEMP ++ ; 他の POS = DIS [I]; } TEMP + = N-I + 1 。 もし(温度<= M)、L = ミッド。 他に、R =半ば1 。 } COUT << L << ENDL。 リターン 0 ; }