我々はすべて知っているように、クラクションがあり 、N と番号、nはプール 1 1〜 n個のn。あり a_iをI におけるリットルの水 I i番目のプールが。毎日、クラクションは順番に次の操作を実行します。
-
(1以上ある場合は、ランダムに1つを選択してください)ほとんど水でプールを検索し、1リットルの水を取ります。
-
(1以上ある場合は、ランダムに1つを選択してください)少なくとも水でプールを検索し、プールに水1リットルを注ぎます。
-
家に帰ると、(次の日を待っている)休息。
ほとんどの水でプール内の水の量とした後、少なくとも水と、プール内の水の量との差を計算してください k個のk個の日を。
入力
入力は複数のテストケースから構成されています。入力は、40を超えないデータセットのfile.The番号の末尾で終了します
各テストケースの最初の行は、二つの整数含ま N nおよび k個のプールの数、プールを操作する日数を示すkは、。
各テストケースが含まれているの2行目 のn nは整数、および I i番目の数が表す a_iをI 中の水の初期量を示す I i番目のプール。
500000 \ 1 \ K 1 ≤ N ≤ 5 0 0 0 0 0、 10 ^ 9 \ 1 \ K 1 ≤ K ≤ 1 0 9 10 ^ 9 \ a_iを\ 1 1 ≤ ので≤ 1 0 9。
出力
各テストケースのために、上述した回答を含む一行を印刷します。
サンプル入力1
4 100 1 10 10
サンプル出力1
1
サンプル入力2
4 3 2 2 2 2
サンプル出力2
0
シミュレーションは、TLE、データ主体があまりにもそれを水でさえありません。。。。。。。
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 typedefの長い 長いLL。 4多重集合<LL> STE。 5 INT メイン() 6 { 7 INTのN、K。 8 ながら(〜のscanf(" %D%以下のLLD "、&N&K)) 9 { 10 ste.clear()。 11 のために(int型 i = 1 ; iが<= N ++ I) 12 { 13 LL。 14 scanf関数(" %のLLD "、&A )。 15 ste.insert(A)。 16 } 17 多重集合<LL> ::イテレータIT1、IT2。 18 一方(k-- ) 19 { 20 IT1 = ste.begin()。 21 LL A = * IT1。 22 ste.erase(IT1)。 23 ste.insert(++ A)。 24 25 IT2 = - ste.end()。 26 = * IT2。 27 ste.erase(IT2)。 28 ste.insert( - A)。 29 } 30 LL ANS =(*( - ste.end())) - (* ste.begin())。 31 のprintf(" %LLDする\ n " 、ANS)。 32 } 33 リターン 0 。 34 }