본문 바로가기

전체 글41

[PS를 위한 자료구조 10강] 펜윅 트리로 머지 소트 트리 구현하기 PS를 위한 자료구조 10강 # 펜윅 트리를 이용한 머지 소트 트리 # 에 대해 알아보겠습니다. 펜윅 트리로도 머지 소트 트리를 구현할 수 있습니다. 펜윅 트리의 치명적 단점에 대해 전달드렸듯이, 펜윅 트리는 [1, R] 구간의 쿼리만 처리가 가능합니다. 따라서 제한적 상황에서만 사용할 수 있습니다. [수열과 쿼리1] https://www.acmicpc.net/problem/13537 하지만 이 문제에서는 사용할 수 있습니다. [1, R] 구간의 K보다 큰 수 - [1, L-1] 구간의 K보다 큰 수 = [L, R] 구간의 K보다 큰 수 가 성립하기 때문이죠. 구현은 다음과 같습니다. i번 노드에 i&-i개의 자료가 정렬이 되어있으면 됩니다. 다만 세그먼트 트리로서 이용할 때와는 달리 자료를 직접 정렬해.. 2022. 3. 25.
[PS를 위한 자료구조 9강] 머지 소트 트리의 개념과 구현 PS를 위한 자료구조 1-9강 # 머지 소트 트리 # 에 대해 알아보겠습니다. ​ 다음의 문제를 봅시다. ​ [수열과 쿼리1] https://www.acmicpc.net/problem/13537 ​ ​ 이 문제를 해결하기 위해 다음과 같은 자료구조를 생각하면 어떨까요? ​ 우리가 흔히 합병 정렬(merge sort)를 하는 과정은 다음과 같습니다. ​ 1 2 3 4 5 6 7 8 | | 1 4 6 8|2 3 5 7 | | | | 1 8|4 6|2 7|3 5 | | | | | | | | 1 8 6 4 7 2 3 5 // 아래에서 위 순서로 진행 그런데 이 모습.. 어쩐지 눈에 익지 않나요? 그렇죠. 우리가 지금까지 공부한게 뭡니까. 세그먼트 트리입니다. ​ 루트에서부터 분할해 나가고, 리프 노드부터 두 노.. 2022. 3. 24.
[PS를 위한 자료구조 8강] 펜윅 트리의 개념과 구현 (Orderstatic Tree) PS를 위한 자료구조 1-8강 # 펜윅 트리의 개념과 구현 # 에 대해 알아보겠습니다. ​ ​ 지금까지 세그먼트 트리에 대해 배웠고 잘 따라온 여러분들에게 감사할 따름입니다. 이번 시간에 배워볼 자료구조는 "펜윅 트리"입니다. 펜윅 트리는 세그먼트 트리의 일종으로, 비재귀 세그먼트 트리에 분류할 수 있습니다. 역시 비재귀 세그먼트 트리답게 이해하는게 쉽지는 않지만, 구현 난이도는 비재귀 세그먼트 트리보다도 쉽습니다. ​ 아래의 세그먼트 트리의 구조를 다시 봅시다. ​ 그런데 이 중에 필요없는 구간이 있지 않을까요? 생각해보면 [1 8] 노드와 [1 4] 노드가 있으면 [5 8] 노드는 필요없는게 아닐까요? [1 8] 노드의 값에서 [1 4] 노드의 값을 빼준다면 [5 8] 노드의 값을 구할 수 있을 것입.. 2022. 3. 24.
[PS를 위한 자료구조 7강] 세그먼트 트리의 응용 (금광 세그) PS를 위한 자료구조 1-7강 # 다양한 세그먼트 트리 테크닉, 금광 세그 # 에 대해 알아보겠습니다. ​ 아래의 문제를 한 번 보겠습니다. ​ [연속합과 쿼리] https://www.acmicpc.net/problem/16993 ​ 구간 합 구하기 4를 풀어보신 분들이라면 다음과 같은 생각을 할 수 있을 것 같습니다. ​ 배열을 누적합으로 만든 다음, 구간 내 최댓값에서 최솟값을 빼면 되지 않을까요? ​ 아쉽게도 해결하기 어려운 반례가 존재합니다. 최댓값이 최솟값보다 앞서서 나오는 경우에는 해결이 불가능하기 때문이죠. ​ 위의 문제를 해결하기 위해 만들어진 테크닉이 바로 "금광 세그"라고 불리는 테크닉입니다. ​ 금광이 나오는게 좀 뜬금없는데, 금광은 2014년 중등부 정보올림피아드에서 출제된 문제의 .. 2022. 3. 24.