우리는이 문제에서 시작합니다.
하나의 문제점 : 수 (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)의 시간 복잡도.