POJ-2352.Stats (펜윅 트리 간단한 응용 프로그램)

시간 제한 :  1000MS   메모리 제한 :  65536k 나
총 제출 :  58255   허용 :  24860

기술

천문학 자들은 별들이 비행기에 점으로 표시됩니다 스타 맵을 검토하고 각 스타 직교 좌표가 있습니다. 별의 레벨이 주어진 별의 오른쪽에 있지 높고없는 별의 양하자. 천문학 자들은 별의 수준의 분포를 알고 싶어요. 

예를 들어, 위의 그림에 표시된지도를보세요. 스타 번호 5 레벨 (그것이 숫자 1, 2, 4 세 개에 의해 형성된 것) (3)와 동일하다. 그리고 2, 4로 번호 별의 수준이지도에서 1. 거기있는 레벨 0의 한 별, 레벨 1의 두 별, 레벨 2의 별 하나, 그리고 레벨 3 중 하나 스타 

당신 주어진지도에 각 레벨의 별의 양을 계산하는 프로그램을 작성한다.

입력

입력 파일의 첫 번째 라인은 N (1 <= N <= 15000) 등급의 수를 포함한다. 다음 라인 N (0 <= X, Y <= 32000, 공백으로 구분 라인 당 두 정수 X와 Y) 별의 좌표를 설명한다. 비행기의 한 지점에 하나의 스타가 될 수 있습니다. 별은 좌표 Y의 오름차순으로 나열되어 있습니다. 동일한 Y 좌표를 가진 별은 X 좌표의 오름 차순으로리스트된다. 

산출

출력은 N 라인, 라인 당 하나 개의 숫자를 포함한다. 첫 번째 행은 제 1의 레벨의 등급 량 않는 등, 마지막 라인은 레벨 N-1의 등급의 양을 포함 레벨 0 등급의 양을 포함한다.

샘플 입력

5 
1 
5 1 
7 1 
3 3 
5 5

샘플 출력

1 
2 
1 
1 
0

힌트

이 문제는 시간 제한이 초과 방지하기 위해 데이터를 판독하는 대신 CIN 거대한 입력 데이터를 사용 scanf와 ()을 갖는다.

출처

 
몇 마디의 사람이 코드에서 밝혔다 ..
/ * 
    읽기 알고 매우 간단했다, 각각의 별은 내가에만 충족해야하는 j.time <i.time  j.row <= 스타는 우리가 방금 입력 순서 것을 알고 질문의 의미를 따라 i.row 수 있습니다. 
    그래서 우리는 스타가되기 전에 넣어 사람들을 선택하고 자신의 스타 이하를 행합니다. 
    그래서 우리는 i.row은 숫자 J 삽입되기 전에 절연 노인 양반 삽입 할 수 < row.j의 개수
  * /
 # (가)가 포함 <cstdio> 
네임 스페이스를 사용하여 STD; 

CONST INT MAXN . = 32000 + 5 , 
INT N- , C [MAXN, ANS [MAXN] 

INT lowbit INT (X) { 
    반환 X 및 (- X) 
} 

추가 (INT의 X, INT의 D)를 무효화 { 
    그동안 (X <= MAXN) { 
        C [X] + = D; 
        X + = lowbit (X) 
    }
}

INT 쿼리 INT (X) { 
    INT 합 = 0;
    반면 (x> 0) { 
        합계 + = C [X]; 
        X - = lowbit (X); 
    } 
    리턴 합; 
} 

INT의 main () { 
    INT의 X, Y; 
    scanf와 ( " %의 D ' , N);
    위한 은 (i ++; i가 N <I = 0 값 int {) 
        는 scanf ( " % d 개 %의 D ' , X, Y); 
        X + = 1 ; 
        ANS [쿼리 (X)] ++ ; 
        추가 (X, 1); 
    } 
    에 대해 (; i가 N <I는 I = 0 ++ 값 int {) 
        의 printf ( " % D \ 없음 " , ANS [I])를 
    } 
    반환 0; 
}

 

 
 

추천

출처www.cnblogs.com/bianjunting/p/11236368.html