ブース予約ストール予約

典型的な欲張り

抽象外観は、実際には、インターバルで、間隔は、最小数の互いに素チェーン、デマンドチェーンを形成することができます

解決

証明は実際には非常に簡単です、あなただけ、等に使用可能なスローを見つけるフェンスが、最後はまだ実際には差がないので、最後の時間であると考えられて失ったどんなにので、

 

<ビット/ STDC ++ H>の#include
 使用 名前空間STD;
 INT NUM = 1 、N-;
 構造体ノード{ int型 ST、ED、IND、中古を;} A [ 50005 ];
 BOOL CMP(ノードA、ノードB){ 戻り A .ST <b.st;} // 開始時刻でソート
BOOL CMP2(ノードA、ノードB){ 戻り a.ind <b.ind;} // 番号注文 
PRIORITY_QUEUEを<対< INTINT >> Qと、// 優先キュー
INT (){主
    scanfの(" %のD "、およびN-);
     のためのINT= I 1、I <= N; Iは++ 
     scanfの(" %Dの%のD "、A&[I] .ST、&A [I] .ED)、A [I] = I .IND; // レコード番号 
    ソート( + 。1、+ N-+ 1 、CMP); 
    [ 1 ] = .used 1。(make_pair(-aの[q.push; 1。 .ED]、1。 )); //は牛舎初期化する
    ためのINT I = 2 ; I <= N; I ++は){
         int型 X = - q.top()まず;.
         INT TMP = q.top()SECOND ;.
         IF(X <[I] .ST){ //は意見に可能です解除
            q.pop(); 
            q.push(make_pair( - [I] .ED、TMP))。
            [I] .used = TMP。
        } 
         { // 不能放就再开一个 
            q.push(make_pair(-a [I] ++、.ED NUM))。
            [I] .used = NUM。// 记录
        } 
    } 
    ソート(A + 1、A + N + 1 、CMP2)。
    printf(" %d個の\ n " 、NUM)。
    int型 i = 1 ; iが<= N iが++ 
     のprintf(" %Dを\ n "、[I] .used); // 出力 
}

 

おすすめ

転載: www.cnblogs.com/coder-cjh/p/11569219.html