데이터 구조 - 펜윅 트리 - 수정 단일 지점 간격 평가 간격 플러스 -1750 및 평가

2020년 4월 3일 12시 35분 23초

문제 설명 :

: 열 알려진 개수는 다음 두 가지 작업을 수행 할 필요가
1 섹션의 수는 각각 X를 더한
값의 수를 구하는 2
입력 :
일본어 배열이다 A. 편의를 위해, A [0]는 0 A [1]부터 시작 열의 실제 개수이다.
동작 4 튜플 주어진다.
각 4- 튜플 (A, B, C, D의 경우 ) :
A가 = 0이면이 필요합니다 (수정) -A [C]의 값은 증가 간격 D [B].
값에게 A = 1 A [B]를 제공하기 위해 필요한 경우. 상기 (C), (D) 비 작동 (질의).

출력 :
출력 데이터의 양을 줄일 수 있습니다. 이 작업 (쿼리)는 배타적 OR (^) 모두의 값을 돌려줍니다.

견본

예 1 :

输入:[0,1,2,3,4],[[1,1,0,0],[0,1,2,1],[1,2,0,0]]
输出:2
解释:
第一个操作返回A [1] = 1
第二个操作改变A为 [0,2,3,3,4]
第三个操作返回A [1] = 3
所以 1 ^ 3 = 2

샘플 2 :

输入:[0,1],[[1,1,0,0]]
输出:1
解释:第一个操作返回A [1] = 1,答案为 1。

주의 사항

  • 시퀀스 길이 <= 10000
  • 오퍼랜드 <= 50000

문제 해결 :

    INT [] 비트; 
    공용 긴 intervalsAddAndGetValue은 {(INT [A는, [] [] 조작 INT) 
        INT N = A.length; 
        새로운 비트 = INT [N]; 
        위한 (INT 나 1 = n은 난 <; I ++) { 
            업데이트 (I, A [I]); 
            업데이트 (ⅰ 1 -A [I]를 +); 
        } 
        긴 고해상도 = 0; 
        (INT [] OP : 오퍼레이션)에 대한 { 
            경우 (OP [0] == 0) { 
                업데이트 (OP [1], OP [3]); 
                업데이트 (OP [2] + 1, -op [3]); 
            } 
            다른 { 
                입술 ^ = 쿼리 (OP [1]); 
            } 
        } 
        고해상도를 반환; 
    } 
    
    개인 무효 업데이트 (INT IDX, INT (δ)) {
        {(; I <bit.length I + = (I &) -i INT I = IDX)에 대한 
            비트 [I] + = 델타; 
        } 
    } 
    
    전용 INT 쿼리 (INT IDX) { 
        INT 입술 = 0; 
        대 (INT I = IDX; I> 0; I - = (I & -i)) { 
            입술 + = 비트 [I]; 
        } 
        고해상도를 반환; 
    }

  

 

추천

출처www.cnblogs.com/hyserendipity/p/12625785.html