매일 질문 day15 펀치
분석
펜윅 나무
이 짝수 인 경우 0 펜윅 트리 1 홀수, 각 문자의 변화 횟수를 유지
사용법 #include <iostream> #INCLUDE <cstdio> #INCLUDE <CString을> #INCLUDE <알고리즘> #DEFINE INT 긴 긴 #DEFINE의 maxn 100000 + 10 std 네임 스페이스를 사용하여; 인라인 INT 읽기 () { INT (X) = 0; 부울 F = 1; 숯 getchar가 C = (); 대 (;! isdigit에 (c) C = getchar가 ()) 경우, (c == '-') F = 0; 대 (; isdigit에 (c) C = getchar가 ()) = X (X << 3) + (X << 1) + C-'0 '; (F) X 반환하는 경우; 0-X를 리턴; } 인라인 기입 공극 (INT의 X) { 경우 (X <0) {putchar ( '-'); X = -x} 경우 (x> 9) 기록 (X / 10); putchar (X의 10 % + 0); }은 N INT, m; INT 트리 [maxn]; NUM & -num를 반환; } 인라인 공극 빌드 (INT의 S, INT의 NUM) { 위해 (ⅰ = s의 값 int, i가 N = <나는 lowbit + = (I)) 트리 [내가] + = NUM 단계; } 인라인 INT는 (INT를들)에게 { INT ANS = 0; 경우 (I = s의 값 int; I> = 1, I- = lowbit (I)) = + ANS 트리 [I]; ANS를 반환; } ) (주 서명 { ) (= m을 읽고, N = () 판독; 위한은 (i ++; I <= m I = 1 INT) { ) (= INT의 판독; / * 위해 (; 나는 = <N; I = 1 int로 난 ++) { INT Tim는 = (i)를 요청; 만약 TIM (== 0) 기록 (0); 다른 경우 (팀 % 2 == 0) 기록 (0); 다른 경우 (팀 % 2 == 1) 기록 (1); COUT << ""; } COUT << ENDL; * / 경우 (== 1) { (읽기 용 L = INT), R = 판독 (); 빌드 (L, 1); 빌드 (R + 1, -1); } 경우 (== 2) { INT (X) = 판독 (); INT 팀 = 요청 (X); 만약 TIM (% 2 == 0) 기록 (0); 다른 경우 (팀 % 2 == 1) 기록 (1); 의 printf ( "\ n")를; } } 0을 리턴; }
갱스터의 논문을주세요(어쨌든, 나는이 논문을 무엇을 의미하는지 모른다)