羅区P5661バス転送&[NOIP2019人気グループ(アナログ)

ポータル


問題解決のためのアイデア

すべてのデータの最初のダウン読みください。

地下鉄、プラスの直接の回答では、その後、配列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

おすすめ

転載: www.cnblogs.com/yinyuqin/p/11967537.html