1361(+46)、瞳の
ランク:1912(リバイバル列車を開始しようとしています)
分析:フェンウィック木問題(あなたがたは書くことフェンウィックツリーを忘れてゲーム...)
コード:
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 のconst int型 MAXN = 1E5 + 10 。 4 チャーS [MAXN]。 5 INT C [MAXN] [ 30 ]。 6 int型のlen; 7 8 INT lowbit(INT X) 9 { 10 リターン X&( - X)。 11 } 12の 13 空隙INI() 14 { 15 のために(INT I = 1; 私は= LENを<; I ++ ) 16 のための(INT J = I; J> = I - lowbit(I)+ 1 ; j-- ) 17個の C [i]は[S [J] - ' ' + 1 ] ++ ; 18 } 19 20 空隙更新を(int型 POS、チャータール) 21 { 22 のために(int型 I = POSと、私は= LEN <; I + = lowbit(I)) 23 { 24個の C [i]は[S [POS] - [ 「 + 1 ] - 。 25個の C [i]は[タール- ' ' + 1 ] ++ ; 26 } 27の S [POS] = タール。 28 } 29 int型の和(INT A、INT B) 30 { 31個のint RES [ 30 ]。 32 のmemset(RES、0、はsizeof (RES))。 33 INT ANS = 0 。 34 のためには、(int型 I = bを、I> = 1 ; I - = lowbit(I)) 35 用(INT J = 1 ; J <= 26 J ++; ) 36の RES [J] + = C [I] [J]。 37 のために(int型 iは=; I> = 1 ; I - = lowbit(I)) 38 のための(INT J = 1 ; J <= 26 ; J ++ ) 39の RES [J] - =のC [i]は[J] ; 40 のためには、(int型 i = 1 ; iは<= 26 ; I ++ ) 41 であれば(RES [i])とANS ++ 。 42 戻るANSを。 43 } 44 45 のint main()の 46 { 47 のint OPE。 48 CIN >>(S + 1 )。 49 LEN =のSTRLEN(S + 1 )。 50 INT N。cinを>> N; 51の INI()。 52 一方(N-- ) 53 { 54 のscanf(" %dの"、およびOPE)。 55 であれば(OPE == 1 ) 56 { 57 INTPOS; scanf関数(" %のD "、およびPOS)。 58 チャー X [ 10 ]。scanf関数(" %sの" 、X)。 59 更新(POS、X [ 0 ])。 60 } 61 他の 62 { 63 int型A、B。 64 のscanf(" %D%dの"、&、&B)。 65 COUT <<和( - 1、B)<< ENDL。 66 } 67 } 68 }