질문의 의미 :
컬럼의 수를 감안할 때, 당신은 다음과 같은 두 가지 작업을 수행해야합니다
1. 각 섹션 플러스 몇 가지 숫자 X
(2)의 수의 값을 구하기
해결 방법 :
펜윅 트리 유지 보수 차이 배열, 배열 함수는 트리와 접두사를 찾을 수 있습니다
업데이트 섹션 및 문의의 단일 지점
코드 :
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#INCLUDE <비트 / stdc ++ H.> 사용 스페이스 성병; CONST의 INT maxn 1E6 + = 5 ; INT의 N, m; INT의 C [maxn], A [maxn]; 보이드 updata ( INT의 POS, INT의 X) { 대 (; POS <= N] + = POS, POS 및 -pos) C [POS] + = X; } INT 쿼리 ( INT POS) { INT ANS = 0 ; 대 (; POS, POS 및 pos- = -pos) ANS + = C [POS]; 반환 ANS를; } int 형 ) (주 { scanf와 ( " %의 D % d에 " , N, m); 위한 ( int로 I = 1 ; 나는 <= N; ++ i가 ) { scanf와 ( " 가 % d " , & A [I]); updata (I, A [i]를 -a [I- 1 ]); } 반면 (M-- ) { int 형 에; scanf와 ( " %의 D " , OP); 경우 (연산 == 1 ) { INT의 X, Y, K; scanf와 ( " % D % D % D ' , X, Y, K); updata (X, K); updata (Y + 1 - K); } 그밖에 { INT (X); scanf와 ( " %의 D ' , X); INT ANS = 쿼리 (X); 의 printf ( " % D \ 없음 " , ANS); } } 반환 0 ; }