주제 포털
문제 해결 아이디어 :
다시 찾는 것은 감소하지 않고보다 큰 길이의 전체 길이를 감산 최장 서브 - 시퀀스에서 더 증가하지 않는다.
AC 코드 :
1 #INCLUDE <iostream> 2 #INCLUDE <cstdio> 3 #INCLUDE <알고리즘> 4 5 이용 스페이스 성병; 6 7 INT의 N, A [ 30001 ], F [ 30001 ] DP [ 30001 ] 렌 TOT; 8 9 INT 의 main () { 10 는 scanf ( " %의 D ' , N); 11 대 ( INT 나 = 1 ; i가 <= N; I ++ ) (12) 는 scanf ( " %의 D " , & A [I]); 13 F [++ LEN] = A [ 1 ]; 14 대 ( INT 난 = 2 ; 나는 <= N; I ++ ) { 15 의 경우 (a [I]> = F [LEN]) { 16 (F)는 [++ LEN] = A [I]; 17 계속 ; 18 } 19 INT U = UPPER_BOUND (F + 1 , F + LEN + 1 , A [I]) - F; 20 (F)는 [유] = A [I]; 21 } 22 DP [++ TOT] = A [ 1 ]; 23 대 ( INT I =2 ; I <= N; I ++ ) { 24 의 경우 (a [I] <= DP [TOT]) { 25 DP [++ TOT] = A [I]; (26) 계속 ; 27 } 28 INT U = UPPER_BOUND (DP + 1 , + DP LEN + 1 , A [i]는 큰 < INT > ()) - DP; (29) (DP)가 [유] = A [I]; 30 } 31 의 printf ( " %의 D ' , N - 맥스 (TOT 렌)); 32 반환 0 ; 33 }