(選択された各最小)貪欲、その後明らかにすべてのサンプルを通過しない直接... 2つの建物は、別の建物は明らかに交差することができないので、好ましくない...第一オリジナルシリーズがに加工されたときに選択さ(すべてのオフィスとの距離で)のn-1の数、対象における[]の存在は、隣接していないK基の数を選択するように求め、そしてその結果、選択された最小数
[]最初の1を選択し、K = 2のGeを選択することが、2126年であればそれでも、その後、何のメソッドは、2回の2選挙を見つけないでしょう貪欲と考えられるが、すべての選挙最小限、我々は恥ずかしい、6を選択しなければなりませんでした図1は、1が2つの山に2 +後で、我々は2-1と同等のものを取ることができます2削除し、スタックを挿入すると、選択されている...我々はそれを選んだ、我々は救済策を検討...拾いましたその2個の2、及びので、ここでは、一つだけ選択したため、2-1 + 2は、二つの数字から選択される表すことができる-1
...問題は、最初または最後の桁数の境界を取るように、存在する場合、[0]が最大値に割り当てられ、[N] ...唱えます
国境の辺の数が唯一の有効な数値であるので、それは、将来のに取られることができない、(時間が数2を是正するために必要な...)是正最大に割り当てることはできません
それは数の前の数字は、数ある保管しなければならない、数が数である(便利削除)
721268は、1を取る、2は両方を削除して、新しいリストを開き、このリスト領域212で置換された[++ n]は、+ 2ストレージ2-1、空間
スペースの新しいリスト、前駆体は7場所で、場所の後継者は7,6前任者と後継者を変更することを忘れないでください... 6 ...
1の#include <iostreamの> 2の#include <cstdioを> 3の#include <CStringの> 4の#include <アルゴリズム> 5 の#define N 100009 6 使って 名前空間STD。 7 int型 N、DIS [N]、LA、lheap、ヒープ[N << 3 ]、POS [N << 3 ]、K、今、点[N << 3 ] [ 2 ]、前、次、 8 長い 長い [N << 3 ]、ANS。 9インラインボイドプッシュ(INT X) 10 { 11 のint i = ++ lheap。 12は、 ヒープ[I] =のX; 13である POS [X] = I; // スタックの[] x番目の位置を記録するPOSリスト 14 ながら(I> 1 ) 15 IF [ヒープ(Iは] <A [ヒープ[I / 2 ]) 16 { 17。 スワップ(ヒープ[I]、ヒープ[I / 2 ]); 18は、 スワップ(POS [ヒープ[I]、POS [ヒープ[I / 2 ] ]) 。19 I >> = 1 ; 20 } 21である 他の リターン; 22れる } 23は、インラインINTデル(INT X)// 削除された場合ここで、それが割り当てられている唯一の最大値は、スタックが最下位置を詰め、それ〜 24 { 25 のint I = POS [X]; 26である [X] = 1E12。 27 一方、式(I * 2 <= lheap) 28 { 29 のint P = Iは、* 2 、 30 IF([ヒープ[P +は1。 ] <A [ヒープ[P])P ++ ; 31である IFヒープ([P ] < A [ヒープ[I]) 32 { 33が スワップ(ヒープ[I]、ヒープ[P]); 34であります スワップ(POS [ヒープ[I]、POS [ヒープ[P])。 35 I = P。 36 } 37 他 破ります。 38 } 39 } 40インラインint型ポップ() 41 { 42 のint i = 1、RT =ヒープ[ 1 ]。 43 ヒープ[ 1 ] =ヒープ[lheap-- ]。 44台の POS [ヒープ[ 1 ] = 1 。 45 一方、式(I * 2 <= lheap) 46 { 47 のint p = iが* 2 。 48 であれば([ヒープ[P + 1 ] <[ヒープ[P])p ++ 。 49 であれば([ヒープ[P] < [ヒープ[I]) 50 { 51 スワップ(ヒープ[I]、ヒープ[P])。 52 スワップ(POS [ヒープ[I]、POS [ヒープ[P])。 53 I = P。 54 } 55 他に 戻り、室温; 56 } 57 リターンRT。 58 } 59 のintmain()の 60 { 61は int型I、J、K、 62である CIN K >> >> N-DIS [ 1 ]; 63である [ 0 ;] [N- = 1E12 = // 最大値を割り当て境界。 ..([]は、n-1、明らかに境界N-数であるので) 64 ポイント[ 0 ] [ 1 ] = 1、ポイント[ 0 ] [ 0 ] = 0、ポイント[N-] [ 1 ] = N-、ポイント[N-] [ 0 ] = N- 1。 ; // 説明は説明されている... 65 プッシュ(0 )、プッシュ(N-); 66 のための(I = 1 ; Iは、N- <; I ++は) 67 { 68 scanfの(" %のD "、&DIS [Iは、+ 1。]); 69 A [I]がDISを= [I +は1。 ] - DIS [I]、 70 ポイント[I] [ 0 ] = I- 1。; 71は、 ポイント[ I] [ 1 ] = I +は1 ; 72 プッシュ(I); 73である } 74 75 のための(N-ラ=; K; K-- ) 76 { 77 ; ANS = A + [今= POP()] // 後に終了ポップヒープが拡大しているので、最初のプッシュは、その要素がポップ・ヒープに残る 78 ポイント= PREV [今] [ 0 ] =次のポイント[今] [ 1 ]; // 最後のアレイ、それはカバーを押すことができる 79 A [++ラ] [PREV] + [次] Aが= - [今]; 80 81 ポイント[ラ] [ 0 ] =ポイント[PREV] [ 0 ]; 82 ポイント[ポイント[PREV] [ 0 ] [ 1 ] = ラを、 83 ポイント[ラ] [ 1。 =]ポイント[次] [ 1 ]; 84 ポイント[ポイント[次] [ 1 ] [ 0 ] = ラと、 85 86 プッシュ(LA)。// デル前に、プッシュ 87 デル(PREV)、デル(次へ); 88 } 89 COUT ANS << << ENDL; 90 }