반응형

>>> 풀이 전략 <<<
- LIS 알고리즘을 활용하라는 제목..
- 수열의 크기가 1,000,000 이다. => DP를 통한 LIS ( X ) , Binary Search를 통한 LIS ( O )
- 부분 수열의 길이만 구하면 되므로, 배열을 두개 생성 ( LIS 임시배열, 입력 값을 받는 LIST 배열 )
#include <iostream>
int list[1000001] = {};
int lis[1000001] = {};
int binary(int j, int i);
int main() {
std::ios::sync_with_stdio(0);
std::cin.tie(0);
int n;
std::cin >> n;
for (int i{ 0 }; i < n; i++) {
std::cin >> list[i];
}
int j = 1;
int i = 0;
lis[0] = list[0];
while(j <= n) {
if (lis[i] < list[j]) {
lis[++i] = list[j];
}
else if(lis[i] > list[j]){
lis[binary(j, i)] = list[j];
}
j++;
}
std::cout << i+1 << "\n";
}
int binary(int j, int i) {
int s = 0;
int e = i;
int mid;
while (s < e) {
mid = (s + e) / 2;
if (list[j] > lis[mid]) {
s = mid+1;
}
else if (list[j] < lis[mid]) {
e = mid;
}
else {
return mid;
}
}
return s;
}반응형
'백준 알고리즘' 카테고리의 다른 글
| [c++ 알고리즘] 백준 15686: 치킨배달 (0) | 2024.09.12 |
|---|---|
| [C++ 알고리즘] 백준 24511: queuestack (0) | 2024.09.05 |
| [C++ 백준알고리즘] 백준 7569: 토마토 (0) | 2024.08.31 |
| [C++ 백준 문제풀이] 백준 1806: 부분합 (0) | 2024.08.25 |
| [c++ 백준 문제풀이] 백준 1918: 후위표기식 (0) | 2024.08.23 |