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]; } 고해상도를 반환; }