貪欲クラス間隔の問題

インターバルカバレッジの問題

Nは、間隔[AI、バイ]数直線を閉じた状態で、選択インターバルは、セグメント[S、T]を指定するためにできるだけ覆わ。

前に読んで、直接の範囲の外に無視し、小型から大型のためにどのような左のポイントに応じて、より少ない今ポイントの範囲をカバーし、左の点を満たすために探して起動すると、区間の右端ポイント[全早口言葉が行う、I何が......と言うあなたは出力がないソリューションに見つからない場合は

ペースト

 

1つの#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3 typedefの長い 長いLL。
4  の#define N 1000005
 5インラインint型リード(){
 6      INT S = 0、W = 1 7      チャー CH = GETCHAR()。
8      一方(CH < ' 0 ' || CH> ' 9 '){ 場合(CH == ' - ')W = - 1 ; CH = GETCHAR();}
 9     一方、(CH> = ' 0 ' && CH <= ' 9 ' {S =秒*)10 + CH- ' 0 ' ; CH = GETCHAR();}
 10      リターン S * W。
11  }
 12  構造体P {
 13      int型A、B。
14      フレンドブール 演算子 < (PX、PY)
 15      {
 16          場合(XA == YA)戻り XB < YB。
17          リターン XA < 屋。
18      }
 19 } QY [N]。
20  のint main()の
 21  {
 22      INT N =(読み取り)、Sは、read()は、tはCNT =、read()は= = 0 23      一方(N-- 24      {
 25          INTは X =読み取る()、Yは= )(読み取ります。
26          であれば(X> T || Y <S)続けます27          QY [++ CNT] = xで.A、QY [CNT] .B = Y。
28      }
 29      ソート(QY + 1、QY + CNT + 1 )。
30      INT今= sで、I = 1、ANS = 0 31      一方(今<T)
 32      {
 33の          ANS ++ 34          int型の KK = 今;
35          のために(; QY [I] .A <= KK &&私は= CNTを<; Iは++ 36              今= MAX(今、QY [I] .B)。
37          であれば(今== KK && KK <T){COUT << " いいえ解決する\ n "ブレーク;}
 38      }
 39      場合(今> = T)COUT << ANS << ENDL。
40 }
コードの表示

 

同様に、水の前処理は、それがOKに、小さい幅よりも直径の外径を発行カバーします

 

間隔が問題と交差しません

仕事のn個の点からは、TIの時間が終了し、各ジョブの開始時刻のSIに、それぞれがあります。あなたの目標は、それに参加することができますどのように多くまで働く、その後、作業に参加することは可能な限り参加するのですか?

書き込み時間が長すぎる、まだ読み込むことができます

直接接続されています

1の#include <iostreamの>
 2の#include <アルゴリズム>
 3  使用して 名前空間STDを、
4  の#define MAX 100005
 5  構造体P {
 6      INTのYI、ER。
7  } QY [MAX]。
8  BOOL CMP(PA、PB)
 9  {
 10      リターン a.er < b.er。
11  }
 12  のint main()の
 13  {
 14      INT N。
15      一方(CIN >> N && N)
 16      {
 17          のためにINTi = 0 ; iがn <; iは++)CIN >> QY [I] .yi。
18          のためにint型 I = 0 ; iがN <; I ++)は、CIN >> QY [I] .ER。
19          ソート(QY、QY + N、CMP)。
20          INT ANS = 0、T = 0 21          のためには、int型、I = 0 ; iがN <; Iは++ 22              場合(T < QY [I] .yi)
 23              {
 24                  のt =のQY [I] .ER。
25の                  ANS ++ ;
26              }
 27         coutの<< ANS << てendl;
28      }
 29 }
コードの表示

 

サイトの問題の間隔を選択

区間[AI、BI]はn個のx軸閉じ与えられ、各セクションは、少なくとも一つの閉鎖点(同じであってもよいし、異なるセクションに含まれる点)を有するように、のようないくつかのポイントを選択します。

ダウンまでの最初の区間の最後の点を整理した後、この間隔は見ていないの点を含む、ANS = 1の場合、ポイントは、[このポイントの右端ポイントが含まれていない範囲の最初の発生に更新されているI周り......

1つの#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3 typedefの長い 長いLL。
4  の#define N 1000005
 5インラインint型リード(){
 6      INT S = 0、W = 1 7      チャー CH = GETCHAR()。
8      一方(CH < ' 0 ' || CH> ' 9 '){ 場合(CH == ' - ')W = - 1 ; CH = GETCHAR();}
 9     一方、(CH> = ' 0 ' && CH <= ' 9 ' {S =秒*)10 + CH- ' 0 ' ; CH = GETCHAR();}
 10      リターン S * W。
11  }
 12  構造体P {
 13      int型A、B。
14      友人ブール 演算子 < (PX、PY)
 15      {
 16          であれば(XB == YB)戻り XA> YA。
17          リターン XB < YB。
18      }
 19 } QY [N]。
20  のint main()の
 21  {
 22      int型 T = )(読み取ります。
23      のためにint型 I = 0 ; iがTを<; I ++)はQY [I] .A(リード。=)、QY [I] .B = (読み取り)
24      ソート(QY、QY + T)。
25      のint = QYノード[ 0 ] .B、ANS = 1 26      のためにint型 i = 1 ; iが<Tを、Iは++ 27          であれば(QY [I] .A>ノード)ノード= QY [I] .Bは、++ ANS 28      coutの<< ANS << てendl;
29 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/Aaaamber/p/11282946.html