차이 점 그룹 학습 노트

제목:
자, 먼저 누 드 문 제 를 보 세 요. n 개의 숫자 가 있 습 니 다.
m 개 조작, 매번 조작, x ~ y 구간 의 모든 수 를 z 증가;
마지막 으로 q 개의 질문 이 있 습 니 다. 매번 질문 할 때마다 x ~ y 의 구간 과.
그럼 이 건 차분 팀 으로 이 루어 질 수 있 겠 네요.
차이 점 수 는 우수한 데이터 구조 일 뿐만 아니 라 좋 은 사상 이기 도 하 다.
차이 점 그룹의 기능 은 구간, 조회 점 을 수정 하 는 것 이다.
구간 을 수정 하 는 시간 복잡 도 는 O (1) 이 고 조회 점 의 시간 복잡 도 는 O (n) 이다.
어떻게 구체 적 으로 이 루어 졌 는 지 살 펴 보 겠 습 니 다.
여기 d 배열 이 필요 합 니 다. d [i] = a [i] - a [i - 1] 먼저 초기 화 해 야 합 니 다.
d[1]=a[1];
    for(int i=2;i<=n;i++)
        d[i]=a[i]-a[i-1];

그리고 처리 구간 입 니 다.
void update(int x,int y,int z)
{
    d[x]+=z;
    d[y+1]-=z;
}

어떻게 1 부터 n 까지 의 합 을 구 합 니까?다음은 O (n) 의 조회 입 니 다. 사실은 O (1) 의 조회 가 있 습 니 다. 접두사 와 만 구하 면 됩 니 다.
sum[1]=d[1];
    for(int i=2;i<=n;i++)
    sum[i]=sum[i-1]+d[i];

다음은 접두사 와 O (1) 를 구 하 는 것 입 니 다. 이때 sum 은 접두사 와
sum[1]=d[1];
t=a[1];
    for(int i=2;i<=n;i++)
    sum[i]+=sum[i-1]+d[i]+t,t+=d[i];

좋은 웹페이지 즐겨찾기