これより詳細で、我々は最初の状態を定義する質問、F [i]が最小に処理時間を表す数値私は、実際には、最後のチューブの左端、我々メダルので、これらは、私は、牛の場所することはできません左端のために
我々は単調性を発見した後、実際には、分+ 1を取るが、範囲内にするときは注意するようにキューに、図2a〜2bとの間であることを
私は前のトピックとみなし、ここでは制限を認めなかったので、私はミスを犯した。この時間は、各チューブのスコープもあるので、場所も、配置する必要がなければならないということです。
#include <iostreamの> する#include <キュー> の#include <マップ> の#include <ベクトル> の#include <cstdioを> する#include <アルゴリズム> の#include <スタック> の#include <CStringの> 使用して 名前空間STDを、 typedefの長い 長いLL。 CONST INT N = 1E6 + 7 。 const int型 INF = 0x3f3f3f3f 。 int型ST [N]; 構造体ノード{ int型のL、R。 } S [N]。 INT F [N]。 INTのQ [N]。 int型メイン(){ int型I。 整数N、M。 INT 、L、B。 CIN >> N >> L >> B。 以下のために(iは= 1 ; iが<= N; I ++ ){ CIN >> S [i]は.Lは>> S [i]の.R。 用(INT J = S [i]が.L + 1 J ++; J <S [I] .R ) ST [J] = 1 。 } のmemset(F、0x3fを、はsizeof F)。 F [ 0 ] = 0 ; int型J; int型 HH = 0 ; int型 TT = 0 ; Q [ 0 ] = 0 ; 用(INT I = 2、I + =; I <= L * 2 ){ 一方(HH <= TT && Q [HH] <I- 2 * B) HH ++ 。 一方、(HH <= TT && F [Q [TT]]> = F [I- 2 * A]) TT - 。 Q [ ++ TT = I- 2 * 。 場合(ST [i]は) 継続します; F [I] = F [Q [HH] + 1 。 } もし(F [L] <INF / 2 ) COUT << F [L] << ENDL。 他 COUT << - 1 << てendl; }