非常対象ジャイアントピット我々は巨大なピットよりもそれがすべてのより大きな保証できませんので、それも本当にサンプルは、ペアで、とにかく、非常に奇妙な貪欲ではなく、暫定的にこの質問を見て、あまりにも彼に行き、実際にピットますされませんでした
#include <iostreamの> する#include <cstdioを> する#include < セット > の#include <アルゴリズム> 使用して 名前空間STDを、 const int型 MAX = 100000 * 2 + 100 。 構造体矩形 { int型ベル、W、H; }のRect [MAX]。 マルチセット < 整数 > MulSet。 マルチセット < 整数 > ::イテレータITER。 BOOL CMP1(矩形、矩形B) { 場合(ああ!= BH) リターン<AH 、BH 、他の IF(!AW = BW) リターン AW < BW; 他の リターン a.bel> b.bel; // アリスにブロックした後の保証、ボブは、ブロックをカバーすることができますが発生した } int型のmain() { INT CAS、I、N-、ANS; CIN >> CAS; 一方(cas-- ) { scanfの(" %のD "、およびN-); のための(I = 0 ; I <N-I ++ ) { scanfの(" % %D D "、&のRect [I]・H&RECT [I] .W)。 RECT [I] .bel = 1 。 } のための(I = N; iは< 2 *をN; iが++ ) { scanf関数(" %d個の%のD "、&のRect [I]・H&のRect [I] .W)。 RECT [I] .bel = 2 。 } MulSet.clear()。 ANS = 0 ; ソート(のRect、のRect + 2 * N、CMP1)。 用(i = 0 ; iは< 2 * N; iは++ ) { 場合(のRect [I] .bel ==1 ) { IF(!)MulSet.empty() { ITER = ; MulSet.begin() IF(のRect [I] .W> =(* )ITER) { ANS ++ ; ITER = MulSet.upper_bound(のRect [I ] .W); // キーはのRect [より大きいI] .W第 iter--; // 削除確保以下のRect [I] .W MulSet最大要素 MulSet.erase(ITER); } } } 他 { MulSet.insert(のRect [I] .W)。 } } のprintf(" %d個の\ n " 、ANS)。 } 戻り 0 。 }