彼らは引退を余儀なくされている場合でも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 + 1:0 。 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、0、25 ) であれば(弓[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 。 }