ポータル
問題解決のためのアイデア
すべてのデータの最初のダウン読みください。
地下鉄、プラスの直接の回答では、その後、配列aに番号を入れます。
フロントからバック配列を列挙して、早い出現と価格に従い、以下のバスの価格よりを見つけ、その後、(0)この番号を削除するバスの場合。
[最初]まず、0以上45分未満であるとき次に++、時間を最適化するために、我々は見キュー配列を置くことができるたびに45分間有効を考慮する。
配列の数が45を超えていないことをこれが保証されます。
時間複雑で見納めには、O(NK)は、Kが45以上ではありません。
Aが出てリラックス。
ACコード
1の#include <iostreamの> 2の#include <cstdioを> 3 使用して 名前空間をSTD。 4 CONST INT MAXN = 100005 。 5 INT、N、X、P [MAXN]、T [MAXN]、[MAXN]、CNT、FIR = 1 。 6つの 長い 長いANS。 7 のint main()の 8 { 9 CIN >> N。 10 のために(INT iは= 1 ; iが<= N; I ++ ){ 11 のscanf(" %D%D%D "、およびX&P [i]は、&T [I])。 12 一方(FIR <= CNT &&([FIR] == 0 || T [i]は-t [FIR]]> 45))モミ++ 。 13 ANS + = P [i]は、 14 であれば(x == 0 ){ 15 [++ CNT] = I。 16 } 他{ 17 のために(INT J =モミあり、j <= CNT; J ++ ){ 18 であれば([J] == 0)続けます。 19 もし(P [i]が<= P [J]){ 20 [J] = 0 ; 21 ans- = P [i]は、 22 ブレーク; 23 } 24 } 25 } 26 } 27 COUT << ANS << ENDL。 28 リターン 0 ; 29 }
// CSP2019普遍集合T2