문제에 LOJ P10117 간단한 문제 해결 방법

매일 질문 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을 리턴; 
}

갱스터의 논문을주세요(어쨌든, 나는이 논문을 무엇을 의미하는지 모른다)

추천

출처www.cnblogs.com/handsome-zyc/p/11544575.html