私は、全体の半分のルートパーティションを折りたたむティルCF E. +

もともとこのゲームを思い付くためにシミュレーションが、非常にフレンドリーな感じああ〜

木の会長が直接、過去に糞便であってもよいが、多くのスペースを消費することができます。 

全体の二分法を考えてみます。 

コード: 

#include <ビット/ STDC ++ H> 
に#define N 100003 
の#defineが長い長いっ
の#define setIO(S)freopenは(S ".IN"、 "R"、STDIN)
名前空間stdを使用。   
INT A [N]、C [N]、ANS [N]、N。         
INT解く(INT X)
{ 
    int型CUR = 0、ANS = 0、LS = 0、I、J、RT = 0。  
    memset(C、0、はsizeof(C))。    
    用(i = 1; iは= N <; ++ I)
    {   
        ++ C [A [I]]。      
        (C [A [I]] == 1)であれば
        { 
            ++ RT。
        } 
        (RT> X)であれば
        { 
            --I。     
            (jは= LSと、J <= I + 1; ++ j)のためのC [A [j]] - 。               
            RT = 0、LS = I + 1、++ ANS; 
        } 
    }
    ++ ANS; 
    ANSを返します。
}     
ボイドdiv_con(int型のL、R INT)
{ 
    int型L =(L)を解く、R =解く(R)  
    IF(L == R)
    { 
        ため(INT J = L; J <= R; ++ j)はANS [J] Lを=。
    } 
    { 
        int型ミッド=(L + R)>> 1。   
        div_con(L、MID)、div_con(MID + 1、R)。   
    } 
} 
int型のmain()
{ 
    int型I、J。
    // setIO( "入力");    
    scanf関数( "%のD"、&N);       
    用(i = 1; iは= N <; ++ I)のscanf( "%dを" &A [I])。    
    用(i = 1; iは* I <= N; ++ I)ANS [I] =(i)を解きます。     
    div_con(I、N)。   
    printf( "%dの"、ANS [I]);(++ I; iが<= N I = 1)のために
}

  

おすすめ

転載: www.cnblogs.com/guangheli/p/11617433.html