728x90
알고리즘 분류: DP
문제 링크: www.acmicpc.net/problem/2352
2352번: 반도체 설계
첫째 줄에 정수 n(1 ≤ n ≤ 40,000)이 주어진다. 다음 줄에는 차례로 1번 포트와 연결되어야 하는 포트 번호, 2번 포트와 연결되어야 하는 포트 번호, …, n번 포트와 연결되어야 하는 포트 번호가 주
www.acmicpc.net
- LIS를 활용한 DP로 해결했다.
- n이 4만이므로 n^2가 8억이므로 시간초과가 발생한다.
- 이분탐색을 활용하여 O(nlogn)으로 해결했다.
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <iostream>
#include <climits>
#include <cstring>
#include <iomanip>
#include <bitset>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>
#define ll long long
#define INF 1e9
using namespace std;
//https://www.acmicpc.net/problem/2352 반도체 설계
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, a;
vector<int> dp(1); // dp[a] : 길이가 a인 LIS들의 마지막 숫자의 최솟값
cin >> n;
while(n--) {
cin >> a;
if(dp.back() < a) dp.push_back(a);
else *lower_bound(dp.begin(), dp.end(), a) = a;
}
cout << dp.size() - 1;
return 0;
}
728x90
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준 / BOJ] 3055 탈출 (0) | 2021.07.08 |
---|---|
[백준 / BOJ] 3425 고스택 (0) | 2021.07.08 |
[백준 / BOJ] 1904 01타일 (0) | 2021.03.19 |
[백준 / BOJ] 9663 N-Queen (0) | 2021.03.18 |
[백준 / BOJ] 1629 곱셈 (0) | 2021.03.18 |