Codeforces 1181E1 A一の国の物語(簡単)

一の国の物語(簡単)

BFSの解体、複雑さのn ^ 2 * log(n)のに暴力を継続して使用することを検討、1E5複雑さがああ行う方法がわかりません。

#include <ビット/ STDC ++。H>
 の#defineは LL長い長
 の#define LD長い二
 の#define ULL符号なし長い長
 の#define第Fiの
 に#define SE第二
 の#define MK make_pair
 の#define PLL対<LL、LL>
 の#define PLI対<LL、整数>
 の#define PII対<整数、整数>
 の#define SZ(X)((INT)x.size())
 の#define ALL(X)(X).begin()、(X).END( )
 の#define FIOイオス:: sync_with_stdio(偽); cin.tie(0)。使用して名前空間はstdを、CONSTのINT N = 1E5 + 7 const int型

 

  INF = 0x3f3f3f3f constの LL INF = 0x3f3f3f3f3f3f3f3f const  int型のmod = 998244353 ;
constの ダブル EPS = 1E- 8 ;
CONST  ダブル PI = ACOS( - 1 )。

テンプレート < クラス T、クラス S>インラインボイド追加(T&、S b)は{A + B =。もし(A> = MOD)A - = MOD;} 
テンプレート < クラス T、クラス S>インラインボイドサブ(T&、S b)は、{ - = B。もし(<0)、A + = MOD;} 
テンプレート < クラス T、クラス S>インラインBOOL chkmax(T&、S B)は{ 返す <bは?= B、;} 
テンプレート < クラス T、クラス S>インラインブール chkmin(T&、S b)は{ 返す > bは?= bの、;} 

int型のn; 

構造体ノード{
     int型、B、C、D。
    ボイドリード(){ 
        scanf関数(" %D%D%D%D "、&​​、&C、&B、&D)。
    } 
    ボイドプリント(){ 
        のprintf(" %D%D%D%D ^^ \ n " 、A、B、C、D)。
    } 
}。

キュー <ベクトル<ノード>> QUE。
ベクトル <ノード> 今、TMPL、tmpR。

ブール CMPA(CONSTノード&X、CONSTノード&Y){
     戻り XA < 屋。
} 
BOOL CMPB(CONSTノード&X、CONSTノード&Y){
     戻り XC < YC。
} 

BOOL {)(解きます 
    ソート(ALL(今)、
    INT MAXB =今[ 0 ] .B。
    以下のためにint型 i = 1 ; iは<SZを(今); iは++ ){
         もし(現在[I] .A> = MAXB){ 
            tmpL.clear()。tmpR.clear(); 
            INT J = 0 ; J <I、J ++ )tmpL.push_back(今[J])。
            以下のためのint型 ; J <SZ(今)J ++ J = tmpR.push_back(今[J])); 
            que.push(TMPL)。que.push(tmpR)。
            返す ; 
        } chkmax(今MAXB、[I] .B)。
    }

    ソート(ALL(今)、CMPB)。
    INT MAXD =今[ 0] .D。
    以下のためにint型 i = 1 ; iは<SZを(今); iは++ ){
         もし(現在[I] .C> = MAXD){ 
            tmpL.clear()。tmpR.clear(); 
            INT J = 0 ; J <I、J ++ )tmpL.push_back(今[J])。
            以下のためのint型 ; J <SZ(今)J ++ J = tmpR.push_back(今[J])); 
            que.push(TMPL)。que.push(tmpR)。
            返す ; 
        } chkmax(MAXD、今[I] .D)。
    }
     {main()の返す ; 
} 

int型
    scanf関数(" %のD "、&N)
    ベクター <ノード> (N)
    以下のためにint型 i = 0 ; iがn <I ++は[i]が.read())を、
    que.push(A)。
    しばらく(!que.empty()){  = que.front(); 
        que.pop(); 
        もし(SZ(今)== 1続けますもし(!解く()){ 
            プット(" NO " );
            リターン 
        } 
    }0 ; 
    プット(" YES " );
    リターン 0 ; 
} 

/ * 
* /

 

おすすめ

転載: www.cnblogs.com/CJLHY/p/11041555.html