レポートの問題解決「採掘:崩壊(ODT)。」

オリジナルタイトル住所

次の日、私たちはKeduo李水の問題で引退したツリーに準拠する必要があります。

 

コードは次のように実装されています。

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
#defineする ITが設定<ノード> ::イテレータ
 の#define担当者(iは、、B)は(レジスタINT I =(A); iが<=(B); iは++)のconst int型 MAXN = 5E5 + 5 INTの N、M、CNT = 1 チャーSTR [MAXN]。構造体ノード{
     int型のL、R。
    変更可能なchar型のV; 
    ノード(INT L、int型の R = - 1チャー V = 0 ):L(L)、R(R)、V(V){}
     int型の演算子(<

 



 CONSTノード&O)のconst {
         戻り L < OL。
    } 
}。

セット <ノード> S。

intです読み出す(){
     int型のx = 0、フラグ= 0 CHAR CH = '  ' ;
    しばらく(CH =!' - ' &&(CH < ' 0 ' || CH> ' 9 '))CH = getchar関数();
    もし(CH == ' - ' ){ 
        フラグ =1 ; 
        CH = GETCHAR()。
    } 
    一方、(CH> = ' 0 ' && CH <= ' 9 ' ){ 
        X =(X << 1)+(X << 3)+(CH ^ ' 0 ' )。
        CH = GETCHAR()。
    } 
    を返すフラグ?- X:X; 
} 

ITは、(分割のint {POS)を
    ITが = s.lower_bound(ノード(POS))を、
    もし(それ= s.end()&& IT-> L == POS!)を返すことを。
    それは - INT L = IT-> L、R = IT-> R。
    チャー V = IT-> V。
    s.erase(それ)。
    s.insert(ノード(L、POS - 1 、V))。
    戻りs.insert(ノード(POS、R、V))を最初。
} 

ボイド割り当て(int型 L、int型の R、チャーヴァル){ 
    IT ITR =スプリット(R + 1)、ITL = スプリット(L)。
    s.erase(ITL、ITR)。
    s.insert(ノード(L、R、ヴァル))。
} 

チャー get_val(int型POS){ 
    それIT =スプリット(POS)を、
    戻る > IT-をV; 
} 

int型のチェック(int型 L、INT R){ 
    IT ITR =スプリット(R + 1)、ITL = スプリット(L)。
    CHAR今= itl-> V。
    しばらく(!ITL = ITR){
         場合(!今= itl-> v)のリターン 0 ; 
        ITL ++ ; 
    } 
    リターン 1 
} 

int型のmain(){ 
    N = )(読み取ります。
    scanf関数(" %sの"、STR +1 );
    チャープリ=列str [ 1 ]。
    担当者(I、2 、N){
         場合(プレ==列str [i])とCNT ++ { 
            s.insert(ノード(I - CNT、I - 1 、PRE))。
            CNT = 1 
            プリ =のSTR [I]。
        } 
    } 
    s.insert(ノード(N - CNT + 1 、N、PRE))。
    M = 読み取ります();
    チャー TMP [ 3 ]。
    担当者(I、1 、M){
         int型のL、R。
        scanf関数(" %sの"、TMP + 1)、L = read()は、R = リード()。
        もし(TMP [ 1 ] == ' A ' ){
             チャー OPT [ 3 ]。
            scanf関数(" %sの"、OPT + 1 )。
            割り当てる(Lは、rは、オプト[ 1 ])。
        } 
        {
             場合(1- == 1 ||リットル== N || R == 1 || R == N){
                 場合のprintf(((L、R)を確認) "N \はい" );
                 他ののprintf(" なしの\ n " );
                 続ける; 
            } 
            チャー A = get_val(1 - 1)、B = get_val(R + 1 );
             場合(==のB ||チェック(L! 、R))のprintf(" なしの\ n " );
             のprintf(" はいの\ n " ); 
        } 
    } 
    戻り 0 ; 
}
コードの表示

 

ODTは、O2のみ90pts(私はあまりにもこんにゃくだったことももちろん可能)ので、開いていない、問題は正の解を解決していません。

ツリーラインのアプローチはそれを書くための時間を持っています。

おすすめ

転載: www.cnblogs.com/Kirisame-Marisa/p/11369689.html