小剛在玩JSOI提供的一個稱之爲「建築搶修」的電腦遊戲:通過了一場激烈的戰鬥,T部落消滅了全部z部落的入侵者。可是T部落的基地裏已經有N個建築設施受到了嚴重的損傷,若是不盡快修復的話,這些建築設施將會徹底毀壞。如今的狀況是:T部落基地裏只有一個修理工人,雖然他能瞬間到達任何一個建築,可是修復每一個建築都須要必定的時間。同時,修理工人修理完一個建築才能修理下一個建築,不能同時修理多個建築。若是某個建築在一段時間以內沒有徹底修理完畢,這個建築就報廢了。你的任務是幫小剛合理的制訂一個修理順序,以搶修儘量多的建築。spa
N < 150,000; T1 < T2 < maxlongint排序
按照T1貪心顯然不能夠。遊戲
按照T2貪心呢?若是咱們按照T2排序,能修就修,有什麼問題呢?top
發現,若是一個T2比較小的,可是T1很大,會使得後面不少樓都修不了,不修這個樓反而更優。入侵
因此,咱們把全部的i以前的T1都放進堆裏。時間
若是T1i<top則改修T1,不修top
證實:
若是一個樓不能修了,那麼前i個只能修i-1個,因爲咱們按照T2排序,因此前i個選擇用時最少的i-1個,
就能給後面留更多的時間。