P1020 미사일 요격 (nlogn 수요가 가장 긴 시퀀스를 드롭하지 않습니다)

제목 설명

위해 국가는 미사일 요격 시스템을 개발, 적의 미사일 공격을 방어합니다. 그러나 이러한 미사일 요격 시스템은 결함이있다 : 그것은 어떤 높이에 도달하는 첫 번째 라운드를하지만 각 쉘과 상황은 높이가 도착하기 전에보다 클 수 없습니다 만. 어느 날, 레이더 들어오는 적의 미사일을 집어 들었다. 시스템으로, 베타 여전히 유일한 시스템이며, 따라서 모든 미사일을 요격하지 않을 수 있습니다.

미사일 차례 비행 높이를 입력합니다 (주어진 레이더 데이터의 높이입니다 50000 ≤ \ 50,000 르 5 0 0 0은 양의 정수이다), 당신은 최소한의 장착 할 수있는 모든 미사일을 요격 할 경우, 미사일을 요격하기 위해 얼마나 많은 시스템을 백업 계산 미사일 요격 시스템을 설정합니다.

입력 및 출력 형식

입력 형식 :

. 11 한줄 정수 복수 (번호 100000 르 \ ≤100000 . 1 0 0 0 0 0)

출력 형식 :

(22 개) 2 라인 각각의 정수 라인, 첫 번째 숫자는 모든 미사일에게 이러한 미사일 요격 시스템을 장착되는 세트의 최소 수를 차단하려는 경우, 두 번째 숫자가 표시 얼마나 많은 시스템을 백업이 미사일을 요격하는 방법을 나타냅니다.

샘플 입출력

입력 샘플 # 1 : 복사
389 207 155 300 299 170 158 65
출력 샘플 # 1 : 복사
. (6) 
(2) 가 UPPER_BOUND에 사용될 때 그 자신의 D를 교체 제 미만 발견되지 않는 경우, 가장 긴 시퀀스를 찾는은 수행 할 필요가 직접 삽입 값을 <= D [L]를 삽입하는 경우에 감소되지 (D, D + L 큰 <INT>) - (D)] 가 주문할 수 있도록 코드 :



#INCLUDE <cstdio> 
#INCLUDE <CString을> 
#INCLUDE <iostream> 
#INCLUDE <알고리즘> 
#INCLUDE <큐> 
#INCLUDE <적층> 
#INCLUDE < 설정 > 
#INCLUDE <지도> 
#INCLUDE <벡터> 
#INCLUDE <cmath>
 #DEFINE Inf를 0x3f3f3f3f의 CONST의 INT maxn 1E5 + = 5 ; 
타입 정의 LL;
사용하는 네임 스페이스 표준을; INT A [maxn];
INT D [maxn], [maxn] D2;


   


   LEN = 0 ;
   INT (X);
   반면 (는 scanf ( " %의 D ' , X)! = EOF) 
   { 
         A [LEN ++ =의 X; 
   } 
   d는 [ 0 ] = A [ 0 ]; 
   D2는 [ 0 ] = A [ 0 ]; 
   INT의 L = 0 , L2 = 0 ;
    ( INT의 t = 1 , t <LEN; t ++ ) 
   { 
         경우 (a [t] <= D [L]) 
         { 
             D [L + 1 ] = A [t]을;
           리터 ++ ; 
      } 
      다른 
      { 
          INT의 POS = UPPER_BOUND (D, D + L, A [t], 큰 < INT > ()) - D; 
          D [POS는] = A [t]을; 
      } 
      경우 (a [t]> [L2] D2) 
      { 
          D2의 [L2 + 1 ] = A [t]을; 
          L2 ++ ; 
      } 
      다른 
      { 
          INT의 POS = LOWER_BOUND (D2, D2 + L2, A [t]) - D2; 
          D2 [POS는] = A [t]을; 
      } 
   } 
   COUT << L + 1 << " " << L2 + 1 << ENDL; 
}

 

추천

출처www.cnblogs.com/Staceyacm/p/11224600.html