レポート問題解決「言語1(chin1) - (ODT)を考えるための合理的な根拠。」

オリジナルタイトル住所

彼らは引退を余儀なくされている場合でもKeduo李木水の問題に固執する必要があります。

 

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

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
#defineする ITが設定<ノード> ::イテレータ
 の#define担当者(iは、、B)は(レジスタINT I =(A); iが<=(B); iは++)のconst int型 MAXN = 5E4 + 5 INTのN、M。
チャー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 = 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!)を返すことを。
    それは - 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、ヴァル))。
} 

int型の照会(int型 L、int型の R、チャーヴァル){ 
    IT ITR =スプリット(R + 1)、ITL = スプリット(L)。
    int型 ANS = 0 ;
    しばらく(ITL!= ITR){ 
        ANS + = itl-> V == valの?itl-> R - itl-> L + 10 
        ITL ++ ; 
    } 
    戻りANS。
} 

ボイド quick_sort(int型 L、INT R){ 
    IT ITR =スプリット(R + 1)、ITL = スプリット(L)。
    ITは = ITLを。
    int型の弓[ 30 ]。
    memsetの(弓、0はsizeof(弓));
    一方、(!ITL = ITR){ 
        弓[ITL - > V - ' A ' ] + = itl-> R - itl-> L + 1 
        ITL ++ ; 
    } 
    s.erase(それは、ITR)。
    担当者(I、025 であれば(弓[I]){ 
            s.insert(ノード(L、L + [i]の弓- 1、I + ' A ' )); 
            L + = 弓[I]。
        } 
} 

ボイドライト(int型X){
     場合(X <0 ){ 
        のputchar(' - ' )。
        X = - X。
    } 
    場合(X> 9)書き込み(X / 10 )。
    putchar(Xの10 + ' 0 ' )。
} 

int型のmain(){ 
    N =(読み取り)、M = read()は、
    scanf関数(" %sの"、STR + 1 )。
    int型 CNT = 1 ;
    チャー予備= TOUPPER(STR [ 1 ])。
    担当者(I、2、N){ 
        STR [I] = TOUPPER(STR [I])。
        もし(前==列str [i])とCNT ++ { 
            s.insert(ノード(I - CNT、I - 1 、PRE))。
            CNT = 1 
            プリ =のSTR [I]。
        } 
    } 
    s.insert(ノード(N - CNT + 1 、N、PRE))。
    チャー TMP [ 3 ]。
    担当者(I、1 、M){
         int型のL、R、選びます。
        オプト =読み取る()、L =読み取る()、R = 読み取り()。
        もし(OPTの== 1 ){ 
            scanf関数(" %sの" 、TMP)。
            書き込み(クエリ(L、R、TOUPPER(TMP [ 0 ])))。
            printf(" \ nを" ); 
        } 
        そう であれば(OPTの== 2 ){ 
            scanf関数(" %sの" 、TMP)。
            割り当てる(L、R、TOUPPER(TMP [ 0 ])); 
        } 
        quick_sort(L、R)。
    } 
    戻り 0 
}
コードの表示

おすすめ

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