별
시간 제한 : 1000MS | 메모리 제한 : 65536k 나 | |
총 제출 : 58255 | 허용 : 24860 |
기술
천문학 자들은 별들이 비행기에 점으로 표시됩니다 스타 맵을 검토하고 각 스타 직교 좌표가 있습니다. 별의 레벨이 주어진 별의 오른쪽에 있지 높고없는 별의 양하자. 천문학 자들은 별의 수준의 분포를 알고 싶어요.
예를 들어, 위의 그림에 표시된지도를보세요. 스타 번호 5 레벨 (그것이 숫자 1, 2, 4 세 개에 의해 형성된 것) (3)와 동일하다. 그리고 2, 4로 번호 별의 수준이지도에서 1. 거기있는 레벨 0의 한 별, 레벨 1의 두 별, 레벨 2의 별 하나, 그리고 레벨 3 중 하나 스타
당신 주어진지도에 각 레벨의 별의 양을 계산하는 프로그램을 작성한다.
![](http://poj.org/images/2352_1.jpg)
예를 들어, 위의 그림에 표시된지도를보세요. 스타 번호 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; }