펜윅 나무 2-- 업데이트 간격, 쿼리 템플릿의 단일 지점

주제 링크

질문의 의미 :

컬럼의 수를 감안할 때, 당신은 다음과 같은 두 가지 작업을 수행해야합니다

1. 각 섹션 플러스 몇 가지 숫자 X

(2)의 수의 값을 구하기

해결 방법 :

펜윅 트리 유지 보수 차이 배열, 배열 함수는 트리와 접두사를 찾을 수 있습니다

업데이트 섹션 및 문의의 단일 지점

코드 :

#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 ;
}
코드보기

 

추천

출처www.cnblogs.com/j666/p/11734405.html