POJ-2828 티켓 구매 (트리 라인, 대기 문제, 사고 역)

주제 주소 : POJ 2828 티켓 구매

 

기술

철도 티켓은 중국의 음력 새해의 주위에 살 어려운, 그래서 우리는 일찍 일어나 긴 대기열에 가입해야합니다 ...

설날이 다가오고 있지만, 불행하게도 작은 고양이는 여전히 한 일정은 여기 저기 가고. 이제 그는 정보학 올림픽 대표팀의 겨울 캠프 선택에 면양, 쓰촨성 기차로 여행해야했다.

그것은 하나의시 방향이고 어두운 외부이었다. 큐에있는 사람들을 놀라게하지 않았다 북서쪽에서 바람을 진정. 차가운 밤 작은 고양이에게 전율을 주었다. 이유에 대해 생각하는 문제를 찾을 수 없습니다? 즉 죽음에 동결보다 아무도에게 덜 나은 없었다!

사람들은 큐를 점프 유지. 이 주변에 너무 어두웠 때문에, 이러한 움직임은 심지어 큐 점퍼 옆에있는 사람들에 의해 발견되지 않을 것이다. "큐 - 점프가 주어진 후 그들은 내가 큐에있는 사람들의 마지막 순서를 찾을 수 있습니다, 어디에 서 큐에있는 모든 사람이 대기열을 뛰어 사람들에 대한 적분 값과 모든 정보를 할당하는 경우?"생각 작은 고양이.

입력

입력에서 여러 테스트 케이스가 될 것입니다. 각 테스트 케이스 구성  N  + 1 개 라인  N은  (1 ≤  N  200,000 ≤) 테스트 케이스의 첫 번째 줄에 제시되어있다. 다음  N의  라인 값의 쌍을 포함  순위 I  및  브로 I  의 증가 순서  I (1 ≤가  나는  ≤  N을 ). 각  의 범위의 의미 및  순위는 I  및  브로  다음과 같다 :

  • 순위는 내가  [0 ∈  내가  더 - - 1]  내가 번째 사람이 큐에 와서 바로 뒤에 서 있었다  포스 내가 대기열에 사람을 번째. 예약 사무실은 큐의 최초의 사람으로 간주 된 큐의 선두에 0 번째 사람과 사람으로 간주되었다.
  • 발은 내가  더 - [0, 32767] ∈  I 값 할당 번째 사람  브로 난을 .

이 테스트 케이스 사이에 빈 줄. 입력의 끝으로 이동합니다.

산출

각 테스트 케이스의 경우, 출력 그들이 큐에 서 순서에있는 사람들의 값입니다 공백으로 구분 된 정수의 한 줄.

샘플 입력

4 
0  77 
1  51 
1  33 
2  69 
4 
0  20,523 
1  19,243 
1  3890 
0  31,492

샘플 출력

(77)  33  (69)  51 
31,492  20,523  3,890  19,243

힌트

아래의 그림은 작은 고양이 샘플 입력의 첫 번째 테스트 예제에 설명 된 큐에있는 사람들의 마지막 순서를 발견하는 방법을 보여줍니다.

 

질문의 의미 : 
큐를 점프 할 때 티켓 대기열. 
삽입과 그의 val_i 할 pos_i 사람의 위치를 나타내는 몇 개의 쌍을 지정, 발은 큐의 마지막 순서를 얻을.

분석 : 
이것은 매우 영리한 제목입니다. 

고정 사람 위치의 최종 위치에 삽입 관찰 우리는 후방으로부터 삽입 할 수 있고, POS는, 발 발은 POS 앞에 위치 POS 따로 그 다음에, 대표적인 pos 위치에 삽입되도록,

우리는이 결정되면, 위치 뒤에 사람들이 변경되지 않습니다 역의 뒤쪽에서 시작, 반대 간주 될 수 있으며, 가정의 사람들이 바로 이곳 뒤에 서서 한 다음 때 그 사람 역, 현재 위치 숫자 NUM 공간만큼, 뒷면에 이미, 그리고 개별 스테이션의 위치를 ​​결정 할 수있는 사람들.

예를 들어, crazy_apple의 예에서,시에 ~

세그먼트 트리 노드 번호는이 단락의 간격에 저장 한 다음 POS를 삽입 역 :

    예를 들어 77 0
         . 1 51 인
         (1) (33)이다.
         (2) (69)

  먼저 인출 : 2 69 - - -69- - (전방 삽입구 (3)에 필요)

       그런 다음 걸릴 : 1 33 --- 33--69 --- (두 개의 전면 공간에 삽입하는 데 필요한)

       이어서 취할 151 --- 33--69- -51- (2 갭 앞에 삽입해야 함) 후방 공간으로 전방 만 간극 있도록

  그런 다음 걸릴 : 0 77-77--33--69- -51- (삽입하는 데 필요한 공간의 앞에)

 

1 #INCLUDE <STDIO.H>
 2 #INCLUDE < 문자열 .H>
 3 #INCLUDE <iostream>
 4 #INCLUDE < 문자열 >
 5 #INCLUDE <math.h>
 6 #INCLUDE <알고리즘>
 7 #INCLUDE <큐>
 8 # 포함 < 설정 >
 9 #INCLUDE <math.h>
 10  CONST  INT INF = 0x3f3f3f3f ;
11 의 typedef  LL;
12  CONST의  INT maxn 2E5 + = 10 ;
(13)  사용하여  네임 스페이스를STD;
 14  
(15)  INT N-;
 16  INT 추가 [MAXN << 2 ] // 갭 번호 
. 17  INT의 POS [MAXN]; // 삽입 위치 
18  INT 브로 [MAXN]; // 초기 값 
. 19  INT의 ANS의 [ MAXN]; // 최종 스테이션 
(20)은  
(21)은  공극 빌드 ( INT의 L, INT의 R & LT는 INT RT)
 (22)가  {
 23 인      추가 [RT]을 L - R & 중위 + = 1이다. ] // 갭의 초기 번호 
24      IF (L == R & LT)
 25         리턴 ;
 26는      INT에서 m = (L + R 및 LT) >> . 1 ;
 27      빌드 (L, m, RT << 1. )
 28      빌드 (m의 +를 1. , R & LT, RT를 << 1. | 1. ) 
 (29)  }
 (30)  
(31)가  하는 int 업데이트 ( INT의 L, INT의 R & LT, INT NUM, INT RT) // NUM 중단은 공극의 수가 앞에 필요한 
32  {
 33 인      추가 [RT] -; // . 갭 번호 저장 1 
(34)은      IF (L == R & LT)
 35          리턴 L; // 삽입 위치를 반환
36      의 INT = (L + R 및 LT) >> m . 1 ;
 37      IF (추가 [RT << 1이다. ]> = NUM) // 이상의 삽입의 삽입 위치의 좌측에 동일한 좌측 아이 스페이스 경우 
38 인          업데이트 (L, m, NUM , RT << 1이다. )
 (39)      다른 // 수가 마이너스의 왼쪽에 삽입 될 NUM 빈 NUM 왼쪽 공간 오른쪽 삽입 오른쪽 위치 미만이면 
40      {
 41          납입 추가 = RT << 1이다. ]은,
 42          업데이트 (m의 + . (1) , R & LT, NUM, RT << 1. | 1. )
 (43)이다      }
 44이다  }
 45  
46는  INT 주 ()
 47  {
 48      그동안(~는 scanf ( " %의 D " , 및 N-))
 49      {
 50          빌드 ( 1. , N-, 1이다. )
 (51)는          에 대해 ( INT I = . 1 ; I <= N- I가 ++ )
 (52)가          {
 53은              scanf와 ( " %의 D %의 D " , POS [I], 브로 [I]);
 54이다          }
 55           ( INT I는 => N - I = 1. , 난 -) // 업데이트를 반전은, 최종 위치 결정된다 
(56)되어          {
 57는              INT 키 업데이트 = ( 1, N-, POS [I] + 1. , 1. ); //가 삽입되는 공간 
(58)              ANS하는 열쇠 브로 = [I]; // 저장 ANS 어레이 
(59)          }
 (60)          에 대한 ( INT I = 1. ; I <= N-; ++ 나 )
 (61)는          {
 62 인              경우 ! (I는 = . 1 )
 (63)는                  의 printf는 ( "  " )
 64              의 printf ( " %의 D ], ANS [I])
 65          }
 66          의 printf ( " \ N-는 " );
 (67)     }
 68      반환  0 ;
69 }

 

추천

출처www.cnblogs.com/jiamian/p/11281076.html