반응형

https://www.acmicpc.net/problem/2352

 

2352번: 반도체 설계

첫째 줄에 정수 n(1 ≤ n ≤ 40,000)이 주어진다. 다음 줄에는 차례로 1번 포트와 연결되어야 하는 포트 번호, 2번 포트와 연결되어야 하는 포트 번호, …, n번 포트와 연결되어야 하는 포트 번호가 주

www.acmicpc.net

 

연결선이 꼬이지 않도록 가장 많이 연결하려면,

가장 긴 증가하는 부분 수열의 길이를 구해주면 됩니다.

이분 탐색을 이용하여 구해주었습니다.

 

#include <iostream>
using namespace std;

int n, a, arr[40000], ans = 1;

int lowerBound(int s, int e, int val) {
	while (s < e) {
		int mid = (s + e) / 2;
		if (arr[mid] >= val) e = mid;
		else s = mid + 1;
	}
	return e;
}

int main() {
	scanf("%d %d", &n, &arr[0]);
	for (int i = 1; i < n; i++) {
		scanf("%d", &a);
		if (arr[ans - 1] < a) arr[ans++] = a;
		else arr[lowerBound(0, ans - 1, a)] = a;
	}
	printf("%d", ans);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 5549 : 행성 탐사  (0) 2021.11.17
백준 1689 : 겹치는 선분  (0) 2021.11.17
백준 9470 : Strahler 순서  (0) 2021.11.17
백준 15922 : 아우으 우아으이야!!  (0) 2021.11.17
백준 1726 : 로봇  (0) 2021.11.17

+ Recent posts