차동 및 접두사와

우리는이 문제에서 시작합니다.

 

하나의 문제점 : 수 (n)가 할당되어, m 명령마다이되는 추가 요구 (K)의 수, 모든 숫자의 최종 평가.

$ 1 ≤ k 값 ≤ n을 m의 ≤ 10 ^ 5 $.

사실,이 문제는 배열에 의해 서비스 될 수있다.

 

두 번째 문제 : m 명령마다의 수 (n)이 할당되어있다 제 X-Y 더한 개수 요청 수있는 모든 수의 최종 평가.

$ 1 ≤ X ≤ y를 ≤ n을 m의 ≤ 10 ^ 5 $

사실,이 제목 블록, 트리 라인, 펜윅 나무와 다른 알고리즘은 이러한 질문에 너무 많은입니다.

그러나 다음 질문으로 보면 :

 

세 가지 문제 : m 명령마다의 수 (n)이 할당되어있다 제 X-Y 더한 수가 모든 숫자의 최종 평가 요청 번호.

$ 1 ≤ X ≤ Y ≤에서의 N, 5 * 10 ^ 6 $의 m ≤

, O는 (N 로그 n)뿐만 아니라 느린 복잡했다 할 수없는이 범위가 너무 큰 5e6 : 우리는 발견했다.

그래서, 우리의 주제에 : 차이.

 


 

차이

①의 차이점은 무엇입니까?

차이는 요약 및 문의에 의해 달성 일정한 복잡성 마크 스킬입니다.

일반적위한 적합한 고정 유지 (첨가 전에 전면 최종 평가).

 

② 차동 어떻게 사용 하는가?

우리는 당신에게 예를 들어주지 :

열은 여러 가지가있을 수 있습니다 :

    . (1)   . (9) (2) 8.6 3. 4. 5. 7 
태그 : 0 0 0 0 0 0 0 0 0 // 현재 표시된 어떤 태그가없는

이제, 우리는 번호 5 플러스 2의 세 번째 숫자입니다.

그리고 우리가 처음 세 숫자 2 다음에 모든 숫자를 시작한 다음 6 번에서 뒤에 모두 마이너스 2 숫자로 시작할 수 있다는 것을 발견,이 숫자 5의 세 번째 숫자에 해당 플러스 2.

그럼 표시 :

A [I] :   1   . 9   (2)   . (8)   . (3)   . (7)   . (4)   . 6   . 5 
태그 :   0   0   2   0   0   -2 0   0   0   // 플래그 * 1 표시

그런 다음, 우리 다음 숫자 8을 뺀 1 ~ 4 번.

위의 아이디어에 따라, 우리는 첫 9 개 숫자 1 다음에 모든 숫자를 시작, 1 마이너스 모든 숫자 뒤에 숫자 4에서 시작할 수 있습니다.

A [I]을 :   . 1   . 9   (2)   . (8)   . (3)   . (7)   . (4)   . 6   . 5 
태그 :   0   0   2 -1   0 -2   0   0   . 1   // 표시 표시된 * 2

명령 실행이 종료 가정, 우리는이 합계 :

기록 합 어레이 태그 번호와 이전 $ 가져 I $ sum_i 대표.

A [I]는 :   1   9   2   8   3   7   4   6   5 
태그 :   0   0   2 - 1 개   0 - 2   0   0   1   
합 [I]는 : 0 0 2 1 1 -1 -1 -1 0

마지막으로, 우리는 $ sum_i $ 합계에 해당하는 $의 A_I의 $를 추가, 대답이다.

O (N)의 시간 복잡도.

추천

출처www.cnblogs.com/zengpeichen/p/11279207.html