典型的な欲張り
抽象外観は、実際には、インターバルで、間隔は、最小数の互いに素チェーン、デマンドチェーンを形成することができます
解決
証明は実際には非常に簡単です、あなただけ、等に使用可能なスローを見つけるフェンスが、最後はまだ実際には差がないので、最後の時間であると考えられて失ったどんなにので、
<ビット/ 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を<対< INT、INT >> 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); // 出力 }