전체 이분법 템플릿, 소위 전체 이분법은 실제로 보존 및 수정 요청하고 절반 범위 ;
트리 나무도 설정할 수 있지만 많은 양의 코드;
사용법 #include <iostream> #INCLUDE <cstdio> #INCLUDE <알고리즘> std 네임 스페이스를 사용하여, N = CONST INT 1E5 + 7]의 typedef 긴 긴 LL; 인라인 INT 읽고 () { INT (X) = 0, F = 1; CHAR CH = getchar가 (); 동안 (CH2 <0 || CH> '9') {경우 (CH2 == '-') = -1 F, CH = getchar가 ()} 동안 (CH2> = 0 && CH <= '9') {(X) = (X << 1) + (X << 3) + (CH ^ 48) = CH getchar가 ()} X * F를 반환; } 구조체 쿼리 { INT O, L, R, K, I; 쿼리 (INT O = 0, = 0에서 만약, 당신이 = 0 R, K = 0가하면 I = 0) {this-> O = O; this-> L = 리터; this-> R = R; this-> K = K; this-가> 난 =} } Q [N << 2] Q1 [N << 2], Q2 [N << 2] INT N, m, C [N], [N] w, 입술 [N]; 인라인 INT lowbit INT (X) {복귀, X (- X)} 추가 인라인 공극 (INT의 X, Y INT) {C [I] + = Y (; I <= N + I = lowbit (I) I = INT (X))에 대한} 인라인 INT 합 INT (X) {INT 입술 = 0; 동안 (X) 입술 + C = [X, X- = lowbit (X) 복귀 입술} 해결 인라인 공극 (S INT, INT t, INT의 L, R INT) { 경우 (L == R) { 대 (INT I = S; I <= t; I ++) 경우 (Q [I] .o를 == 2) 입술 [Q [I] .I] = 1; 반환; } INT 중간 = (L +의 연구) >> 1 = 0 CNT1, CNT2 = 0; 대 (INT I = S; I <= t; I ++) { 경우 (Q [I] .o를 == 1) { 경우 (Q [I] .L <= MID) 추가 (Q [I · I, Q [I] .R) Q1 [CNT1 ++ = Q [I]; 다른 Q2 [++ CNT2 = Q [I]; } 그밖에 { INT (X) = SUM (Q [I] .R) -sum (Q [I] .L-1); 만약 (x> = Q [I] .k) Q1 [CNT1 ++ = Q [I]; 다른 Q [I] .k- = X, Q2 [++ CNT2 = Q [I]; } } 위한 (INT 난 = 1; I <= CNT1; I ++) 경우 (Q1 [I] .o를 == 1) 추가 (Q1 [I] .I, -Q1 [I] .R); Q1 = [I] [I-1 + (S)]에 대한 Q (I ++; I <= CNT1 INT 난 = 1) 단계; Q [S + CNT1 + I-1] = (Q2) [I]의 (; I <= I ++ CNT2 INT 난 = 1) 단계; (CNT1)은 (S, S + cnt1-1, L, 미드)를 해결할 수있는 경우; (CNT2)를 풀면 (S + CNT1, t, 미드 + 1, R); } () 주요 int로 { N = M = 1) (판독) (읽기, INT CNT = 0, TOT = 0; 위한 (INT 난 = 1; I <= N; I ++) Q [++ CNT = 쿼리 (1, w [i]를 판독 = (), 1,0, I); 위한 (INT 난 = 1; I <= m; I ++) { 숯 CH; CIN >> CH; (CH2 == 'Q') Q [++ CNT] .o 인 = 2, Q [CNT] 펜닐 = (판독), Q [CNT] .R = (판독), Q [CNT] .k = 읽으면 () Q [CNT] .I = TOT ++; 그밖에 { L = INT (판독), R = (판독); ([L] w (1), - 1,0, l) Q [++ CNT = 조회; Q [++ CNT = 쿼리 ([L] w (1) = R, 1,0, l); } } 해결 (1, CNT, 0,1e9 + 1); COUT << 입술 [I] << ENDL 위해 (; I <= I ++ TOT INT 난 = 1) 단계; 0을 반환; }