문제 링크
- http://icpc.me/2957
문제 출처
- 2008/2009 COCI Contest #3 5번
사용 알고리즘
- Union-Find
시간복잡도
- O(NlogN)
- O(N)
풀이
set을 사용한 O(NlogN)풀이와 Union Find를 사용한 O(N)풀이가 있습니다.
x를 삽입할 때 트리에 있는 원소 중 x보다 작은 최댓값, x보다 큰 최솟값을 찾으면 아래 두 가지 형태 중 하나가 나옵니다.
두 정점을 a, b라고 하면 dep[x] = max(dep[a], dep[b]) + 1이 됩니다.
set을 써서 계산을 해주면 O(NlogN)이 나옵니다.
처음에는 모든 공간이 비어있는 상태이고, 원소가 삽입될 때 마다 연속된 빈 공간이 둘로 쪼개진다고 생각할 수 있습니다.
연속된 빈 공간을 하나의 노드로 보고, 바로 왼쪽과 오른쪽의 있는 숫자를 관리해주는 union find를 생각해볼 수 있습니다.
집합을 쪼개는 것은 어렵지만, 거꾸로 생각하면 모두 쪼개진 상태에서 하나씩 union하는 것은 가능하기 때문에 거꾸로 처리를 해주면 됩니ㅠ다. (ex. KOI2016 중등 3번 트리)
전체 코드
1 |
|