반응형
https://www.acmicpc.net/problem/14003
#include <bits/stdc++.h>
#define MX 1'000'003
using namespace std;
int n;
vector<int> v, ans, forPrint;
int arr[MX], indexArr[MX];
int lower_bound(int val) {
int st = 0;
int en = ans.size() - 1;
while (st <= en) {
int mid = (st + en) / 2;
if (ans[mid] >= val) {
en = mid - 1;
} else {
st = mid + 1;
}
}
return st;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
int idx = lower_bound(arr[i]);
if (idx == ans.size()) {
ans.push_back(arr[i]);
} else {
ans[idx] = arr[i];
}
indexArr[i] = idx;
}
int answer = ans.size();
cout << answer << '\n';
for (int i = n - 1; i >= 0; i--) {
if (indexArr[i] == answer - 1) {
forPrint.push_back(arr[i]);
answer--;
}
}
for (int i = forPrint.size() - 1; i >= 0; i--) {
cout << forPrint[i] << ' ';
}
return 0;
}
반응형
'Algorithm > problem' 카테고리의 다른 글
백준 7575번 : 바이러스 - KMP (0) | 2022.11.30 |
---|---|
백준 13711번 : LCS 4 - LIS (0) | 2022.11.30 |
백준 11049번 : 행렬 곱셈 순서 - dp (0) | 2022.11.28 |
백준 11585번 : 속타는 저녁 메뉴 - kmp (0) | 2022.11.28 |
백준 1701번 : Cubeditor - KMP (0) | 2022.11.28 |