[単調スタック] [タイトル]テンプレート
あなたはアトランティスの失われた都市の聞いたことがあります。伝説が進むにつれ、アトランティスは偉大な富と権力の都市でした。そして、神はアトランティスと不快になり、海にそれを沈めました。あなたが聞いたことがないかもしれないことはデメトリオス、市は水中押された時の船とアトランティスで唯一の人の話です。
デメトリオスは非常に利己的な男だったと彼は都市内の水位上昇に気づいたときに一つだけの事を考えた:アトランティスでアクセス可能金の富を収集し、宝物を永遠に失われた前に彼の船にそれを輸送します。水位が上昇し始めたときに幸いにもデメトリオスため、金の店舗を安全に保つ多くの警備員は、安全性を追求するために自分の記事を放棄しました。
デメトリオスはアトランティス内のすべての金の店の場所とどのくらいの時間が彼の船に特定のストアとバックに到達するために彼を取るを知っています。彼はまた、ストアが上昇海に飲み込まれるとき決定の各金店が常駐、高度を知っています。トラブルは、彼は、彼らが水没なる前に、彼はすべての店にそれをする時間があるでしょうかわからないということです。彼は今、彼は彼の最適なスケジュールを選ぶならば、彼は、前にそれぞれの浸水に訪れることができる店舗の最大数を不思議。
2017 NCNA地域の中には、以下の明確化が投稿されました:「重要:金の店は店舗へとから全体の旅行中に水の上に残っている必要があります。
最初の入力の行整数を含有する N 、N (1≤n≤200000) (1 ≤ N ≤ 2 0 0 0 0 0 )、アトランティスで金店舗数。次 のn n行は、各行に2つの整数を含むであろう T_I T I と H_I H 、I 、 (1≤t_i、h_i≤10^ 9) (1 ≤ T I 、H 、I ≤ 1 0 9)、それはデメトリオスがかかります秒で往復時間は、店を訪問する I iと金と彼の船に戻って、店の海抜フィート I I、それぞれ。
\\ [20pt] \ normalsize \ textbf {出力} 出力
出力金店舗の最大数はデメトリオスは、それぞれが前にそれが水没しつつに訪問されるように訪れることができます。想定海面は、片足で毎秒上昇高さで始まり 0 0、とすぐに上昇を開始します。
各行の最後に余分なスペースが、その答えは、出力の有効性には影響を与えません。
すべてのベストに入るために貪欲、最短時間を決定します。時間は短いですが、下の高さが起こるでしょう。
ソリューション:プライオリティキューに入れ、その後、高さによって最初のソート番号を入力し、レコードの合計時間を設定すると、キューnow_timeを必要な各プラグ1がnow_time場合よりも、これが最初になりますと仮定することができますどのくらいです我々は高い、最長を放出するために必要とされる新たな高みに行きます。
なぜ高さに応じてソートされていますか?、キューの状態が保証され、高さhのための最適なソリューションがhまでの高さに移動します。
最も長い時間を除外して溶液を占領したが、新しい数値はミックスに追加し、ANSに一から一は変わらないが、時間が必要と短いです。あなたはANS + 1を排除するものではない場合。達成するために、「キャッシュ配列要素に読み込まし続け、アドホッククエリ最小要素の現在のキャッシュ・アレイ随時最も古い要素を削除します。」
#include <ビット/ STDC ++ H> 名前空間STDを使用して、 #defineは200000 MAXN 構造体ノード{ INT T、時間。 ブール演算子<(constのノード&X)のconst { 戻りT <XT。 } } [MAXN]。 PRIORITY_QUEUE <ノード> Q。 ブールCMP(CONSTノードと、ノードのconst&B){ <BTであれば(AH == BH)のリターン; 他に戻りああ<BH。 } int型のmain(){ int型のn; scanf関数( "%のD"、&N); 以下のために(INT I 1 =; I <= N; I ++)のscanf( "%D%D"、および[I] .T、および[I]・H)。 ソート(+ 1、+ 1 + N、CMP)。 int型now_time = 0; 以下のために(INT I 1 =; I <= N; I ++){ now_time + = [I] .T。 q.push([I])。 ノードk = q.top()。 q.pop(); now_time- =カラット。 } } COUT << q.size()<< ENDL。 }