[タイトル]効果
問題の意味ミッションスケジュール1、データ範囲は$ 1 \ルNの\のLE3となり* 10 ^ 5,1 \ルS、T_I、C_I \ le512 $
[解析]アイデア
私たちは、マイナーな最適化ソリューションに1つのタスクを手配します
(ST [I] + S)* SC [J] \ - セット$ ST、SC $はT $であり、接頭辞Cの$配列と伝達方程式は[J] F [I] =分\ {F $に変換されます。 }(0 \ルJ <I)+ ST [i]は* SC [I] + S * SC [n]は$
我々は、分$ $関数を削除し、その後、約J $ $ F変数とみなす[J]、皮下[J] $、残りの部分が考慮される$定数は、$ F [J] =(ST [I] + S値)* SC [J] + F [i]の-st [I] * SC [i]は-S * SC [n]は$
我々縦軸に対して確立さ$ SC [J] $横軸、$ F [j]が$平面の直交座標系、これは$ STの傾きである[I] + Sの$、$ yをする$軸カットで[I] -st [I] * SC [I] -S * SC [n]は$ストレートF $の距離。同等の、座標系候補セットは、点の集合であり、各決定の$ $のJは、システムが点$(SC [J]、F [J])$に対応する座標。ラインの傾きは[i]が小さい$ F次に$、小さい切片を固定されています。
速やか無駄決定を除去するために、我々は、「隣接するスロープを結ぶ2つの線分が単調増加」と維持「凸包の下に。」直線の$ kは$勾配のために、線の傾きは、ときに左頂点$ <k個の$、右セグメント$の傾き> K $は、次いで、頂点は最適な決定です。
具体的には、キュー単調凸包を維持するためにこれを使用することができます。$ Q $は単調頂点の凸包に対応する決定変数の複数のキューを保持し、横軸インクリメントさを満たす、隣接2点を結ぶ線分の傾きも単調に増加しています。
次のように各状態変数$ i個の$のために、私たちは進みます。
{ - F [Q [L] F [Q [L + 1]]}、{$ Qを[L]、Q [L + 1] $、もし$ \ FRACの傾きの2つの決定変数$ 1 $ HOL検査SC [Q [L + 1]] - SC [Q [L]]} \ルS + ST [i]は$、プットの$ Q [L] $ヘッド素子まで繰り返し操作まで満たさないデキュー
この場合、$ $ HOL $ Q [L] $最適な決定であり、計算$ F [i]が$ 2.
3.テール$ $要素の$ Q [R-1]、Qをチェックする[R] $ $ I $を満たす単調増加勾配、満たさない次いで$ Q [R] $デキュー尾要素まで繰り返します単調に増加するスロープを満たして、私は$ $は、尾に挿入します
アルゴリズムの時間計算量は$ O(N)$です
[]コードの実装
1の#include <cstdioを> 2の#include <iostreamの> 3の#include <CStringの> 4の#include <アルゴリズム> 5の#include <cmath> 6の#include <キュー> 7 の#define G()GETCHAR() 8 の#define RGレジスタ 9 の#defineは <;(= BをI ++は(I、B)iがRG iは= INT)に行く 10 の#defineバック(I、B)(RG iは= int型のために、I = B>。 i--) 11 の#defineダブルDB 12 の#defineは長い長いっ 13 の#define ILインライン 14 の#define PFのprintf 15 の#defineMEM(A、B)のmemset(A、B、はsizeof(A)) 16 使用 名前空間STDを、 17 int型のFR(){ 18 INT W = 0、Q = 1 。 19 CHAR CH = G(); 20 一方(CH < ' 0 ' || CH> ' 9 ' ){ 21 であれば(CH == ' - ')、Q = - 1 。 22 CH = G(); 23 } 24 ながら、(CH> = ' 0 ' && CH <=' 9 ')w <<(= W 1)+(W << 3)+ CH- ' 0 '、CH = G(); 25 リターン * wのQ; 26 } 27 のconst int型 N = 3E5 + 2 。 28 INTの N、S、Q [N]、L = 1、R = 1 。 29 LLのF [N]、ST [N]、皮下[N]、など。 30 INT メイン(){ 31 // freopenは( ""、 "R"、STDIN)。 32 // freopenは( ""、 "" W、STDOUT)。 33 N = frの(); S =のFR()。 行く(I、1、N)ST [I] = ST [I- 1 ] + FR()、SC [i]は= SC [I- 1 ] + FR()。 35 MEM(F、0x3fを); [F 0 ] = 0 。 36 Q [ 1 ] = 0。よう =秒* SC [n]は、 37 ゴー(I、1 、N){ 38 RG LL kは= S + ST [i]は、 39 一方(L <R && F [Q [L + 1 ]] - F [Q [L] <= K *(SC [Q [L + 1 ]] - SC [Q [L]))L ++ 。 40 F [i]は= F [Q [L]] - K・SC [Q [L] + ST [I] * SC [I] + として; 41 一方、(L <R &&(F [Q [R] - F [Q [R- 1 ]])*(SC [I] -sc [Q [R]])> =(F [I] -f [Q [R]])*(SC [Q [R] - SC [Q [R- 1 ]))r--の。 42 Q [++ R] = I。 43 } 44 PF(" %LLDする\ n " 、F [N])。 45 リターン 0 ; 46 }