제목 설명
위해 국가는 미사일 요격 시스템을 개발, 적의 미사일 공격을 방어합니다. 그러나 이러한 미사일 요격 시스템은 결함이있다 : 그것은 어떤 높이에 도달하는 첫 번째 라운드를하지만 각 쉘과 상황은 높이가 도착하기 전에보다 클 수 없습니다 만. 어느 날, 레이더 들어오는 적의 미사일을 집어 들었다. 시스템으로, 베타 여전히 유일한 시스템이며, 따라서 모든 미사일을 요격하지 않을 수 있습니다.
미사일 차례 비행 높이를 입력합니다 (주어진 레이더 데이터의 높이입니다 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; }