-
[백준] 14003 - 가장 긴 증가하는 부분 수열 5알고리즘/백준 2024. 6. 12. 16:47
가장 긴 증가하는 부분 수열 5: https://www.acmicpc.net/problem/14003
알고리즘: LIS - O(nlogn) + LIS - 경로 추적
코드
#include <iostream> #include <algorithm> #include <vector> #include <stack> using namespace std; int N; int arr[1000011]; int dp[1000011]; vector<int> path; int main() { cin >> N; for (int i = 0; i < N; ++i) { cin >> arr[i]; } dp[0] = -1111111111;// int level = 0; for (int i = 0; i < N; ++i) { if (dp[level] < arr[i]) { dp[++level] = arr[i]; path.push_back(level); } else { int* ptr = lower_bound(dp, dp + level + 1, arr[i]); *ptr = arr[i]; int value = ptr - dp; path.push_back(value); } } for (int i = 1; i <= level; ++i) cout << dp[i] << " "; stack<int> ans; for (int i = N - 1; i >= 0; --i) { if (level < 1) break; if (path[i] == level) { ans.push(arr[i]); level--; } } cout << ans.size() << "\n"; while (!ans.empty()) { cout << ans.top() << " "; ans.pop(); } return 0; }
'알고리즘 > 백준' 카테고리의 다른 글
네트워크 유량(Network flow) (1) 2024.06.16 회전하는 캘리퍼스(Rotating Cailpers) (0) 2024.06.14 [백준] 2550 전구, 비슷한 유형 (1) 2024.06.11 볼록 껍질(Convex Hull) (3) 2024.06.10 [LCS] LCS with O(nlogn) LIS (0) 2024.05.30