펜윅 트리 (업데이트 간격, 메시지의 단일 지점)

 
행 N 풍선은, 왼쪽에서 오른쪽으로는 1,2,3 .... N. 주어 두 번째 정수 각 AB (a <= b), 렐레들이 타고 그의 "조금 각 풍선 색상을 그린에 풍선에서 비둘기 "브랜드 전기 자동차 시작 플라잉 B 차례 풍선합니다. N 시간은 내가 잊어 버린 Lele의 후 그러나 첫 번째 풍선 여러 번 색을 색칠하고있다, 당신은 그 각각의 풍선 여러 가지 색상을 코팅 계산을 도와 드릴까요?

입력 테스트 케이스는 제 정수 N (N <= 100,000) 작용한다 . 다음의 N 개의 행 (1 <= A <= 두 정수를 AB를 포함하는 각 행 <= N B)를.
경우 N = 0, 입력의 종료. 출력 각 테스트 케이스 출력 라인은 N의 정수를 포함하고, I의 수, I는 풍선의 수가 총 착색 나타낸다. 샘플 입력
3 
1 1 
2 2 
3 3 
3 
1 1 
1 2 
1 3 
0
샘플 출력
1 1 1 
3 2 1
사용법 #include <iostream> 
#INCLUDE <cstdio> 
#INCLUDE < 문자열 > 
#INCLUDE <CString을> 
#INCLUDE <알고리즘> 
#INCLUDE <STDIO.H> 
#INCLUDE < 문자열 .H>
 #DEFINE (INT위한 담당자 (I, n)의 I = 0; I는 <(N) ⅰ) ++
 사용  스페이스 성병; 
타입 정의 부호없는  날개 펼진;
INT FA [ 100009 ];
 길이   의 ANS = 0 ;
int로 이 [ 100009 ], 합계 [ 10009를 ];
INTC [ 100009 ];
INT의 N; 

INT lowerbit ( INT X) 
{ 
    복귀 , X (- X); 
} 

공극 업데이트 ( INT (X), INT의 값) 
{ 
    위해 ( int로 I =의 X를, 난 = <N; I + = lowerbit (I)) 
    { 
        C [I]는 + = 값; 
    } 
} 
INT getsum ( INT X) 
{ 
    INT ANS = 0 ;
    위한 ( int로 I =의 X를, I> 0 ; I - =lowerbit (I)) 
    { 
        ANS + = C의 [I]을; 
    } 
    반환 ANS; 
} 

INT 의 main () 
{ 

    동안 (~는 scanf ( " %의 D ' , N) && N) 
    { 
        memset 함수 (C, 0 , 는 sizeof (c));
        위한 ( int로 I = 0 ; I <N이 나 ++ ) 
        { 
            INT의 L, R; 
            scanf와 ( " % d 개 %의 D ' , L, R); 
            업데이트 (L, 1 );

            업데이트 (R + 1 - 1 ); 

        } 
        에 대해 ( int로 I = 1 난 ++; i가 N = < ) 
        { 
            경우 (I == 1 ) << COUT getsum (I);
            다른 
            COUT << "  " << getsum (I); 
        } 
        COUT << ENDL; 

    } 


    반환  0 ; 
}

 

추천

출처www.cnblogs.com/nonames/p/11274503.html